The handling for FPSIMD/SVE traps is multi stage and involves some trap
manipulation which isn't quite so immediately obvious as might be desired
so add a few more comments.

Signed-off-by: Mark Brown <[email protected]>
---
 arch/arm64/kvm/hyp/include/hyp/switch.h | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/arch/arm64/kvm/hyp/include/hyp/switch.h 
b/arch/arm64/kvm/hyp/include/hyp/switch.h
index 58e14f8ead23..1995808d8766 100644
--- a/arch/arm64/kvm/hyp/include/hyp/switch.h
+++ b/arch/arm64/kvm/hyp/include/hyp/switch.h
@@ -173,6 +173,8 @@ static bool kvm_hyp_handle_fpsimd(struct kvm_vcpu *vcpu, 
u64 *exit_code)
                return false;
 
        /* Valid trap.  Switch the context: */
+
+       /* First disable enough traps to allow us to update the registers */
        if (has_vhe()) {
                reg = CPACR_EL1_FPEN;
                if (sve_guest)
@@ -188,11 +190,13 @@ static bool kvm_hyp_handle_fpsimd(struct kvm_vcpu *vcpu, 
u64 *exit_code)
        }
        isb();
 
+       /* Write out the host state if it's in the registers */
        if (vcpu->arch.flags & KVM_ARM64_FP_HOST) {
                __fpsimd_save_state(vcpu->arch.host_fpsimd_state);
                vcpu->arch.flags &= ~KVM_ARM64_FP_HOST;
        }
 
+       /* Restore the guest state */
        if (sve_guest)
                __hyp_sve_restore_guest(vcpu);
        else
-- 
2.30.2

_______________________________________________
kvmarm mailing list
[email protected]
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

Reply via email to