KVM: arm64: Remove ad-hoc CPTR manipulation from fpsimd_sve_sync()
authorMark Rutland <mark.rutland@arm.com>
Tue, 17 Jun 2025 13:37:15 +0000 (14:37 +0100)
committerMarc Zyngier <maz@kernel.org>
Thu, 19 Jun 2025 12:06:20 +0000 (13:06 +0100)
There's no need for fpsimd_sve_sync() to write to CPTR/CPACR. All
relevant traps are always disabled earlier within __kvm_vcpu_run(), when
__deactivate_cptr_traps() configures CPTR/CPACR.

With irrelevant details elided, the flow is:

handle___kvm_vcpu_run(...)
{
flush_hyp_vcpu(...) {
fpsimd_sve_flush(...);
}

__kvm_vcpu_run(...) {
__activate_traps(...) {
__activate_cptr_traps(...);
}

do {
__guest_enter(...);
} while (...);

__deactivate_traps(....) {
__deactivate_cptr_traps(...);
}
}

sync_hyp_vcpu(...) {
fpsimd_sve_sync(...);
}
}

Remove the unnecessary write to CPTR/CPACR. An ISB is still necessary,
so a comment is added to describe this requirement.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Fuad Tabba <tabba@google.com>
Cc: Marc Zyngier <maz@kernel.org>
Cc: Mark Brown <broonie@kernel.org>
Cc: Oliver Upton <oliver.upton@linux.dev>
Cc: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/r/20250617133718.4014181-5-mark.rutland@arm.com
Signed-off-by: Marc Zyngier <maz@kernel.org>
arch/arm64/kvm/hyp/nvhe/hyp-main.c

index e9198e56e784b5ca49e242839899eda81c47dae8..3206b2c07f82a48fece9b9c4ff2802fb8a4416c1 100644 (file)
@@ -69,7 +69,10 @@ static void fpsimd_sve_sync(struct kvm_vcpu *vcpu)
        if (!guest_owns_fp_regs())
                return;
 
-       cpacr_clear_set(0, CPACR_EL1_FPEN | CPACR_EL1_ZEN);
+       /*
+        * Traps have been disabled by __deactivate_cptr_traps(), but there
+        * hasn't necessarily been a context synchronization event yet.
+        */
        isb();
 
        if (vcpu_has_sve(vcpu))