KVM: arm64: Track value of cptr_el2 in struct kvm_vcpu_arch
authorFuad Tabba <tabba@google.com>
Tue, 17 Aug 2021 08:11:27 +0000 (09:11 +0100)
committerMarc Zyngier <maz@kernel.org>
Fri, 20 Aug 2021 10:12:17 +0000 (11:12 +0100)
Track the baseline guest value for cptr_el2 in struct
kvm_vcpu_arch, similar to the other registers that control traps.
Use this value when setting cptr_el2 for the guest.

Currently this value is unchanged (CPTR_EL2_DEFAULT), but future
patches will set trapping bits based on features supported for
the guest.

No functional change intended.

Acked-by: Will Deacon <will@kernel.org>
Signed-off-by: Fuad Tabba <tabba@google.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20210817081134.2918285-9-tabba@google.com
arch/arm64/include/asm/kvm_host.h
arch/arm64/kvm/arm.c
arch/arm64/kvm/hyp/nvhe/switch.c

index 76462c6..ac67d56 100644 (file)
@@ -290,6 +290,7 @@ struct kvm_vcpu_arch {
        /* Values of trap registers for the guest. */
        u64 hcr_el2;
        u64 mdcr_el2;
+       u64 cptr_el2;
 
        /* Values of trap registers for the host before guest entry. */
        u64 mdcr_el2_host;
index e9a2b8f..14b12f2 100644 (file)
@@ -1104,6 +1104,7 @@ static int kvm_arch_vcpu_ioctl_vcpu_init(struct kvm_vcpu *vcpu,
        }
 
        vcpu_reset_hcr(vcpu);
+       vcpu->arch.cptr_el2 = CPTR_EL2_DEFAULT;
 
        /*
         * Handle the "start in power-off" case.
index 1778593..86f3d64 100644 (file)
@@ -41,7 +41,7 @@ static void __activate_traps(struct kvm_vcpu *vcpu)
        ___activate_traps(vcpu);
        __activate_traps_common(vcpu);
 
-       val = CPTR_EL2_DEFAULT;
+       val = vcpu->arch.cptr_el2;
        val |= CPTR_EL2_TTA | CPTR_EL2_TAM;
        if (!update_fp_enabled(vcpu)) {
                val |= CPTR_EL2_TFP | CPTR_EL2_TZ;