]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
KVM: arm64: Repurpose vcpu_arch.debug_flags for general-purpose flags
authorDave Martin <Dave.Martin@arm.com>
Tue, 8 May 2018 13:47:23 +0000 (14:47 +0100)
committerMarc Zyngier <marc.zyngier@arm.com>
Fri, 25 May 2018 11:28:13 +0000 (12:28 +0100)
In struct vcpu_arch, the debug_flags field is used to store
debug-related flags about the vcpu state.

Since we are about to add some more flags related to FPSIMD and
SVE, it makes sense to add them to the existing flags field rather
than adding new fields.  Since there is only one debug_flags flag
defined so far, there is plenty of free space for expansion.

In preparation for adding more flags, this patch renames the
debug_flags field to simply "flags", and updates comments
appropriately.

The flag definitions are also moved to <asm/kvm_host.h>, since
their presence in <asm/kvm_asm.h> was for purely historical
reasons:  these definitions are not used from asm any more, and not
very likely to be as more Hyp asm is migrated to C.

KVM_ARM64_DEBUG_DIRTY_SHIFT has not been used since commit
1ea66d27e7b0 ("arm64: KVM: Move away from the assembly version of
the world switch"), so this patch gets rid of that too.

No functional change.

Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Reviewed-by: Marc Zyngier <marc.zyngier@arm.com>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Acked-by: Christoffer Dall <christoffer.dall@arm.com>
[maz: fixed minor conflict]
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
arch/arm64/include/asm/kvm_asm.h
arch/arm64/include/asm/kvm_host.h
arch/arm64/kvm/debug.c
arch/arm64/kvm/hyp/debug-sr.c
arch/arm64/kvm/hyp/sysreg-sr.c
arch/arm64/kvm/sys_regs.c

index a9ceeec5a76fff5355a2719774b39c6566208cbf..821a7032c0f71d65d5875505cd303b36ef3b1482 100644 (file)
@@ -30,9 +30,6 @@
 /* The hyp-stub will return this for any kvm_call_hyp() call */
 #define ARM_EXCEPTION_HYP_GONE   HVC_STUB_ERR
 
-#define KVM_ARM64_DEBUG_DIRTY_SHIFT    0
-#define KVM_ARM64_DEBUG_DIRTY          (1 << KVM_ARM64_DEBUG_DIRTY_SHIFT)
-
 #ifndef __ASSEMBLY__
 
 #include <linux/mm.h>
index 469de8acd06f5fa4103d9f55d0fb4c4c97d853a9..146c16794d323dc7f3cafa707a99396d5a375448 100644 (file)
@@ -216,8 +216,8 @@ struct kvm_vcpu_arch {
        /* Exception Information */
        struct kvm_vcpu_fault_info fault;
 
-       /* Guest debug state */
-       u64 debug_flags;
+       /* Miscellaneous vcpu state flags */
+       u64 flags;
 
        /*
         * We maintain more than a single set of debug registers to support
@@ -293,6 +293,9 @@ struct kvm_vcpu_arch {
        bool sysregs_loaded_on_cpu;
 };
 
+/* vcpu_arch flags field values: */
+#define KVM_ARM64_DEBUG_DIRTY          (1 << 0)
+
 #define vcpu_gp_regs(v)                (&(v)->arch.ctxt.gp_regs)
 
 /*
index a1f4ebdfe6d3fbe59ac5d22a139b9f159b7cd48f..00d422336a45225ea8f9b16c6a99ebf042ebf68c 100644 (file)
@@ -103,7 +103,7 @@ void kvm_arm_reset_debug_ptr(struct kvm_vcpu *vcpu)
  *
  * Additionally, KVM only traps guest accesses to the debug registers if
  * the guest is not actively using them (see the KVM_ARM64_DEBUG_DIRTY
- * flag on vcpu->arch.debug_flags).  Since the guest must not interfere
+ * flag on vcpu->arch.flags).  Since the guest must not interfere
  * with the hardware state when debugging the guest, we must ensure that
  * trapping is enabled whenever we are debugging the guest using the
  * debug registers.
@@ -111,7 +111,7 @@ void kvm_arm_reset_debug_ptr(struct kvm_vcpu *vcpu)
 
 void kvm_arm_setup_debug(struct kvm_vcpu *vcpu)
 {
-       bool trap_debug = !(vcpu->arch.debug_flags & KVM_ARM64_DEBUG_DIRTY);
+       bool trap_debug = !(vcpu->arch.flags & KVM_ARM64_DEBUG_DIRTY);
        unsigned long mdscr;
 
        trace_kvm_arm_setup_debug(vcpu, vcpu->guest_debug);
@@ -184,7 +184,7 @@ void kvm_arm_setup_debug(struct kvm_vcpu *vcpu)
                        vcpu_write_sys_reg(vcpu, mdscr, MDSCR_EL1);
 
                        vcpu->arch.debug_ptr = &vcpu->arch.external_debug_state;
-                       vcpu->arch.debug_flags |= KVM_ARM64_DEBUG_DIRTY;
+                       vcpu->arch.flags |= KVM_ARM64_DEBUG_DIRTY;
                        trap_debug = true;
 
                        trace_kvm_arm_set_regset("BKPTS", get_num_brps(),
@@ -206,7 +206,7 @@ void kvm_arm_setup_debug(struct kvm_vcpu *vcpu)
 
        /* If KDE or MDE are set, perform a full save/restore cycle. */
        if (vcpu_read_sys_reg(vcpu, MDSCR_EL1) & (DBG_MDSCR_KDE | DBG_MDSCR_MDE))
-               vcpu->arch.debug_flags |= KVM_ARM64_DEBUG_DIRTY;
+               vcpu->arch.flags |= KVM_ARM64_DEBUG_DIRTY;
 
        trace_kvm_arm_set_dreg32("MDCR_EL2", vcpu->arch.mdcr_el2);
        trace_kvm_arm_set_dreg32("MDSCR_EL1", vcpu_read_sys_reg(vcpu, MDSCR_EL1));
index 3e717f66f011d43ad8a8d0b1424c9c0c66d21daa..50009766e5e5680ef7f6ca71a1e30296c2c7cd6a 100644 (file)
@@ -163,7 +163,7 @@ void __hyp_text __debug_switch_to_guest(struct kvm_vcpu *vcpu)
        if (!has_vhe())
                __debug_save_spe_nvhe(&vcpu->arch.host_debug_state.pmscr_el1);
 
-       if (!(vcpu->arch.debug_flags & KVM_ARM64_DEBUG_DIRTY))
+       if (!(vcpu->arch.flags & KVM_ARM64_DEBUG_DIRTY))
                return;
 
        host_ctxt = kern_hyp_va(vcpu->arch.host_cpu_context);
@@ -185,7 +185,7 @@ void __hyp_text __debug_switch_to_host(struct kvm_vcpu *vcpu)
        if (!has_vhe())
                __debug_restore_spe_nvhe(vcpu->arch.host_debug_state.pmscr_el1);
 
-       if (!(vcpu->arch.debug_flags & KVM_ARM64_DEBUG_DIRTY))
+       if (!(vcpu->arch.flags & KVM_ARM64_DEBUG_DIRTY))
                return;
 
        host_ctxt = kern_hyp_va(vcpu->arch.host_cpu_context);
@@ -196,7 +196,7 @@ void __hyp_text __debug_switch_to_host(struct kvm_vcpu *vcpu)
        __debug_save_state(vcpu, guest_dbg, guest_ctxt);
        __debug_restore_state(vcpu, host_dbg, host_ctxt);
 
-       vcpu->arch.debug_flags &= ~KVM_ARM64_DEBUG_DIRTY;
+       vcpu->arch.flags &= ~KVM_ARM64_DEBUG_DIRTY;
 }
 
 u32 __hyp_text __kvm_get_mdcr_el2(void)
index b3894df6bf1ad2b6ce4676e239fbc8fad3147d22..35bc16832efe28ae3e6a85d4e906f1e94024f0c4 100644 (file)
@@ -196,7 +196,7 @@ void __hyp_text __sysreg32_save_state(struct kvm_vcpu *vcpu)
        sysreg[DACR32_EL2] = read_sysreg(dacr32_el2);
        sysreg[IFSR32_EL2] = read_sysreg(ifsr32_el2);
 
-       if (has_vhe() || vcpu->arch.debug_flags & KVM_ARM64_DEBUG_DIRTY)
+       if (has_vhe() || vcpu->arch.flags & KVM_ARM64_DEBUG_DIRTY)
                sysreg[DBGVCR32_EL2] = read_sysreg(dbgvcr32_el2);
 }
 
@@ -218,7 +218,7 @@ void __hyp_text __sysreg32_restore_state(struct kvm_vcpu *vcpu)
        write_sysreg(sysreg[DACR32_EL2], dacr32_el2);
        write_sysreg(sysreg[IFSR32_EL2], ifsr32_el2);
 
-       if (has_vhe() || vcpu->arch.debug_flags & KVM_ARM64_DEBUG_DIRTY)
+       if (has_vhe() || vcpu->arch.flags & KVM_ARM64_DEBUG_DIRTY)
                write_sysreg(sysreg[DBGVCR32_EL2], dbgvcr32_el2);
 }
 
index 6e3b969391fdbb853f621fa60f7c8760d79caa78..a4363735d3f8e11e1cac77f57cab32d23fac4915 100644 (file)
@@ -31,7 +31,6 @@
 #include <asm/debug-monitors.h>
 #include <asm/esr.h>
 #include <asm/kvm_arm.h>
-#include <asm/kvm_asm.h>
 #include <asm/kvm_coproc.h>
 #include <asm/kvm_emulate.h>
 #include <asm/kvm_host.h>
@@ -338,7 +337,7 @@ static bool trap_debug_regs(struct kvm_vcpu *vcpu,
 {
        if (p->is_write) {
                vcpu_write_sys_reg(vcpu, p->regval, r->reg);
-               vcpu->arch.debug_flags |= KVM_ARM64_DEBUG_DIRTY;
+               vcpu->arch.flags |= KVM_ARM64_DEBUG_DIRTY;
        } else {
                p->regval = vcpu_read_sys_reg(vcpu, r->reg);
        }
@@ -369,7 +368,7 @@ static void reg_to_dbg(struct kvm_vcpu *vcpu,
        }
 
        *dbg_reg = val;
-       vcpu->arch.debug_flags |= KVM_ARM64_DEBUG_DIRTY;
+       vcpu->arch.flags |= KVM_ARM64_DEBUG_DIRTY;
 }
 
 static void dbg_to_reg(struct kvm_vcpu *vcpu,
@@ -1441,7 +1440,7 @@ static bool trap_debug32(struct kvm_vcpu *vcpu,
 {
        if (p->is_write) {
                vcpu_cp14(vcpu, r->reg) = p->regval;
-               vcpu->arch.debug_flags |= KVM_ARM64_DEBUG_DIRTY;
+               vcpu->arch.flags |= KVM_ARM64_DEBUG_DIRTY;
        } else {
                p->regval = vcpu_cp14(vcpu, r->reg);
        }
@@ -1473,7 +1472,7 @@ static bool trap_xvr(struct kvm_vcpu *vcpu,
                val |= p->regval << 32;
                *dbg_reg = val;
 
-               vcpu->arch.debug_flags |= KVM_ARM64_DEBUG_DIRTY;
+               vcpu->arch.flags |= KVM_ARM64_DEBUG_DIRTY;
        } else {
                p->regval = *dbg_reg >> 32;
        }