]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: arm64: VHE: Compute fgt traps before activating them
authorAlexandru Elisei <alexandru.elisei@arm.com>
Wed, 12 Nov 2025 10:28:53 +0000 (10:28 +0000)
committerMarc Zyngier <maz@kernel.org>
Wed, 12 Nov 2025 10:52:58 +0000 (10:52 +0000)
On VHE, the Fine Grain Traps registers are written to hardware in
kvm_arch_vcpu_load()->..->__activate_traps_hfgxtr(), but the fgt array is
computed later, in kvm_vcpu_load_fgt(). This can lead to zero being written
to the FGT registers the first time a VCPU is loaded. Also, any changes to
the fgt array will be visible only after the VCPU is scheduled out, and
then back in, which is not the intended behaviour.

Fix it by computing the fgt array just before the fgt traps are written
to hardware.

Fixes: fb10ddf35c1c ("KVM: arm64: Compute per-vCPU FGTs at vcpu_load()")
Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com>
Reviewed-by: Oliver Upton <oupton@kernel.org>
Link: https://patch.msgid.link/20251112102853.47759-1-alexandru.elisei@arm.com
Signed-off-by: Marc Zyngier <maz@kernel.org>
arch/arm64/kvm/arm.c

index 870953b4a8a74f0b51ffb444920604ee29f8b6ff..052bf0d4d0b035abf3bda80bce5983ff87fcd9af 100644 (file)
@@ -624,6 +624,7 @@ nommu:
        kvm_timer_vcpu_load(vcpu);
        kvm_vgic_load(vcpu);
        kvm_vcpu_load_debug(vcpu);
+       kvm_vcpu_load_fgt(vcpu);
        if (has_vhe())
                kvm_vcpu_load_vhe(vcpu);
        kvm_arch_vcpu_load_fp(vcpu);
@@ -642,7 +643,6 @@ nommu:
                vcpu->arch.hcr_el2 |= HCR_TWI;
 
        vcpu_set_pauth_traps(vcpu);
-       kvm_vcpu_load_fgt(vcpu);
 
        if (is_protected_kvm_enabled()) {
                kvm_call_hyp_nvhe(__pkvm_vcpu_load,