Skip to content

Commit d381e53

Browse files
ouptonMarc Zyngier
authored andcommitted
KVM: arm64: Move host SME/SVE tracking flags to host data
The SME/SVE state tracking flags have no business in the vCPU. Move them to kvm_host_data. Tested-by: James Clark <[email protected]> Signed-off-by: Oliver Upton <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Marc Zyngier <[email protected]>
1 parent 38131c0 commit d381e53

File tree

2 files changed

+16
-18
lines changed

2 files changed

+16
-18
lines changed

arch/arm64/include/asm/kvm_host.h

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -610,8 +610,10 @@ struct cpu_sve_state {
610610
* field.
611611
*/
612612
struct kvm_host_data {
613-
#define KVM_HOST_DATA_FLAG_HAS_SPE 0
614-
#define KVM_HOST_DATA_FLAG_HAS_TRBE 1
613+
#define KVM_HOST_DATA_FLAG_HAS_SPE 0
614+
#define KVM_HOST_DATA_FLAG_HAS_TRBE 1
615+
#define KVM_HOST_DATA_FLAG_HOST_SVE_ENABLED 2
616+
#define KVM_HOST_DATA_FLAG_HOST_SME_ENABLED 3
615617
unsigned long flags;
616618

617619
struct kvm_cpu_context host_ctxt;
@@ -916,22 +918,18 @@ struct kvm_vcpu_arch {
916918
/* Guest debug is live */
917919
#define DEBUG_DIRTY __vcpu_single_flag(iflags, BIT(4))
918920

919-
/* SVE enabled for host EL0 */
920-
#define HOST_SVE_ENABLED __vcpu_single_flag(sflags, BIT(0))
921-
/* SME enabled for EL0 */
922-
#define HOST_SME_ENABLED __vcpu_single_flag(sflags, BIT(1))
923921
/* Physical CPU not in supported_cpus */
924-
#define ON_UNSUPPORTED_CPU __vcpu_single_flag(sflags, BIT(2))
922+
#define ON_UNSUPPORTED_CPU __vcpu_single_flag(sflags, BIT(0))
925923
/* WFIT instruction trapped */
926-
#define IN_WFIT __vcpu_single_flag(sflags, BIT(3))
924+
#define IN_WFIT __vcpu_single_flag(sflags, BIT(1))
927925
/* vcpu system registers loaded on physical CPU */
928-
#define SYSREGS_ON_CPU __vcpu_single_flag(sflags, BIT(4))
926+
#define SYSREGS_ON_CPU __vcpu_single_flag(sflags, BIT(2))
929927
/* Software step state is Active-pending */
930-
#define DBG_SS_ACTIVE_PENDING __vcpu_single_flag(sflags, BIT(5))
928+
#define DBG_SS_ACTIVE_PENDING __vcpu_single_flag(sflags, BIT(3))
931929
/* PMUSERENR for the guest EL0 is on physical CPU */
932-
#define PMUSERENR_ON_CPU __vcpu_single_flag(sflags, BIT(6))
930+
#define PMUSERENR_ON_CPU __vcpu_single_flag(sflags, BIT(4))
933931
/* WFI instruction trapped */
934-
#define IN_WFI __vcpu_single_flag(sflags, BIT(7))
932+
#define IN_WFI __vcpu_single_flag(sflags, BIT(5))
935933

936934

937935
/* Pointer to the vcpu's SVE FFR for sve_{save,load}_state() */

arch/arm64/kvm/fpsimd.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,14 @@ void kvm_arch_vcpu_load_fp(struct kvm_vcpu *vcpu)
6565
*host_data_ptr(fpsimd_state) = kern_hyp_va(&current->thread.uw.fpsimd_state);
6666
*host_data_ptr(fpmr_ptr) = kern_hyp_va(&current->thread.uw.fpmr);
6767

68-
vcpu_clear_flag(vcpu, HOST_SVE_ENABLED);
68+
host_data_clear_flag(HOST_SVE_ENABLED);
6969
if (read_sysreg(cpacr_el1) & CPACR_EL1_ZEN_EL0EN)
70-
vcpu_set_flag(vcpu, HOST_SVE_ENABLED);
70+
host_data_set_flag(HOST_SVE_ENABLED);
7171

7272
if (system_supports_sme()) {
73-
vcpu_clear_flag(vcpu, HOST_SME_ENABLED);
73+
host_data_clear_flag(HOST_SME_ENABLED);
7474
if (read_sysreg(cpacr_el1) & CPACR_EL1_SMEN_EL0EN)
75-
vcpu_set_flag(vcpu, HOST_SME_ENABLED);
75+
host_data_set_flag(HOST_SME_ENABLED);
7676

7777
/*
7878
* If PSTATE.SM is enabled then save any pending FP
@@ -168,7 +168,7 @@ void kvm_arch_vcpu_put_fp(struct kvm_vcpu *vcpu)
168168
*/
169169
if (has_vhe() && system_supports_sme()) {
170170
/* Also restore EL0 state seen on entry */
171-
if (vcpu_get_flag(vcpu, HOST_SME_ENABLED))
171+
if (host_data_test_flag(HOST_SME_ENABLED))
172172
sysreg_clear_set(CPACR_EL1, 0, CPACR_ELx_SMEN);
173173
else
174174
sysreg_clear_set(CPACR_EL1,
@@ -227,7 +227,7 @@ void kvm_arch_vcpu_put_fp(struct kvm_vcpu *vcpu)
227227
* for EL0. To avoid spurious traps, restore the trap state
228228
* seen by kvm_arch_vcpu_load_fp():
229229
*/
230-
if (vcpu_get_flag(vcpu, HOST_SVE_ENABLED))
230+
if (host_data_test_flag(HOST_SVE_ENABLED))
231231
sysreg_clear_set(CPACR_EL1, 0, CPACR_EL1_ZEN_EL0EN);
232232
else
233233
sysreg_clear_set(CPACR_EL1, CPACR_EL1_ZEN_EL0EN, 0);

0 commit comments

Comments
 (0)