]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: arm64: Define helper for ICH_VTR_EL2
authorMarc Zyngier <maz@kernel.org>
Mon, 14 Jul 2025 12:26:27 +0000 (13:26 +0100)
committerOliver Upton <oliver.upton@linux.dev>
Wed, 16 Jul 2025 03:24:29 +0000 (20:24 -0700)
Move the computation of the ICH_VTR_EL2 value to a common location,
so that it can be reused by the save/restore code.

Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20250714122634.3334816-5-maz@kernel.org
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
arch/arm64/kvm/sys_regs.c
arch/arm64/kvm/vgic/vgic.h

index 6981c1b34c2c443d5a81fd446956c63db60144da..6763910fdf1f3d180ab97d6fcfd57535d38ab055 100644 (file)
@@ -2521,11 +2521,7 @@ static bool access_gic_vtr(struct kvm_vcpu *vcpu,
        if (p->is_write)
                return write_to_read_only(vcpu, p, r);
 
-       p->regval = kvm_vgic_global_state.ich_vtr_el2;
-       p->regval &= ~(ICH_VTR_EL2_DVIM         |
-                      ICH_VTR_EL2_A3V          |
-                      ICH_VTR_EL2_IDbits);
-       p->regval |= ICH_VTR_EL2_nV4;
+       p->regval = kvm_get_guest_vtr_el2();
 
        return true;
 }
index af4bf80b785c36ba7ba683c3ef8d523c59173942..67233fa04e709d576e197d202abb57dfa92f4785 100644 (file)
 
 #define KVM_ICC_SRE_EL2                (ICC_SRE_EL2_ENABLE | ICC_SRE_EL2_SRE | \
                                 ICC_SRE_EL1_DIB | ICC_SRE_EL1_DFB)
+#define KVM_ICH_VTR_EL2_RES0   (ICH_VTR_EL2_DVIM       |       \
+                                ICH_VTR_EL2_A3V        |       \
+                                ICH_VTR_EL2_IDbits)
+#define KVM_ICH_VTR_EL2_RES1   ICH_VTR_EL2_nV4
+
+static inline u64 kvm_get_guest_vtr_el2(void)
+{
+       u64 vtr;
+
+       vtr  = kvm_vgic_global_state.ich_vtr_el2;
+       vtr &= ~KVM_ICH_VTR_EL2_RES0;
+       vtr |= KVM_ICH_VTR_EL2_RES1;
+
+       return vtr;
+}
 
 /*
  * As per Documentation/virt/kvm/devices/arm-vgic-its.rst,