KVM: arm64: Convert vcpu sysregs_loaded_on_cpu to a state flag
authorMarc Zyngier <maz@kernel.org>
Sat, 28 May 2022 11:38:24 +0000 (12:38 +0100)
committerMarc Zyngier <maz@kernel.org>
Wed, 29 Jun 2022 09:23:32 +0000 (10:23 +0100)
The aptly named boolean 'sysregs_loaded_on_cpu' tracks whether
some of the vcpu system registers are resident on the physical
CPU when running in VHE mode.

This is obviously a flag in hidding, so let's convert it to
a state flag, since this is solely a host concern (the hypervisor
itself always knows which state we're in).

Reviewed-by: Fuad Tabba <tabba@google.com>
Reviewed-by: Reiji Watanabe <reijiw@google.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
arch/arm64/include/asm/kvm_host.h
arch/arm64/kvm/hyp/vhe/sysreg-sr.c
arch/arm64/kvm/sys_regs.c

index 39da28f..ffbeb5f 100644 (file)
@@ -410,10 +410,6 @@ struct kvm_vcpu_arch {
        /* Additional reset state */
        struct vcpu_reset_state reset_state;
 
-       /* True when deferrable sysregs are loaded on the physical CPU,
-        * see kvm_vcpu_load_sysregs_vhe and kvm_vcpu_put_sysregs_vhe. */
-       bool sysregs_loaded_on_cpu;
-
        /* Guest PV state */
        struct {
                u64 last_steal;
@@ -520,6 +516,8 @@ struct kvm_vcpu_arch {
 #define ON_UNSUPPORTED_CPU     __vcpu_single_flag(sflags, BIT(2))
 /* WFIT instruction trapped */
 #define IN_WFIT                        __vcpu_single_flag(sflags, BIT(3))
+/* vcpu system registers loaded on physical CPU */
+#define SYSREGS_ON_CPU         __vcpu_single_flag(sflags, BIT(4))
 
 /* Pointer to the vcpu's SVE FFR for sve_{save,load}_state() */
 #define vcpu_sve_pffr(vcpu) (kern_hyp_va((vcpu)->arch.sve_state) +     \
index 007a12d..7b44f6b 100644 (file)
@@ -79,7 +79,7 @@ void kvm_vcpu_load_sysregs_vhe(struct kvm_vcpu *vcpu)
        __sysreg_restore_user_state(guest_ctxt);
        __sysreg_restore_el1_state(guest_ctxt);
 
-       vcpu->arch.sysregs_loaded_on_cpu = true;
+       vcpu_set_flag(vcpu, SYSREGS_ON_CPU);
 
        activate_traps_vhe_load(vcpu);
 }
@@ -110,5 +110,5 @@ void kvm_vcpu_put_sysregs_vhe(struct kvm_vcpu *vcpu)
        /* Restore host user state */
        __sysreg_restore_user_state(host_ctxt);
 
-       vcpu->arch.sysregs_loaded_on_cpu = false;
+       vcpu_clear_flag(vcpu, SYSREGS_ON_CPU);
 }
index f24797c..1c562bc 100644 (file)
@@ -72,7 +72,7 @@ u64 vcpu_read_sys_reg(const struct kvm_vcpu *vcpu, int reg)
 {
        u64 val = 0x8badf00d8badf00d;
 
-       if (vcpu->arch.sysregs_loaded_on_cpu &&
+       if (vcpu_get_flag(vcpu, SYSREGS_ON_CPU) &&
            __vcpu_read_sys_reg_from_cpu(reg, &val))
                return val;
 
@@ -81,7 +81,7 @@ u64 vcpu_read_sys_reg(const struct kvm_vcpu *vcpu, int reg)
 
 void vcpu_write_sys_reg(struct kvm_vcpu *vcpu, u64 val, int reg)
 {
-       if (vcpu->arch.sysregs_loaded_on_cpu &&
+       if (vcpu_get_flag(vcpu, SYSREGS_ON_CPU) &&
            __vcpu_write_sys_reg_to_cpu(val, reg))
                return;