Skip to contentSkip to conversation

KVM: arm64: Additional documentation of the FP code

PATCH Applied Mark Brown 2 participants 4 messages Jan 24, 2022 – Feb 8, 2022

Subsystems (2)
lore
Share & tools
lore

Mark Brown

author
#0 lore raw

cover KVM: arm64: Additional documentation of the FP code

These couple of patches add a few more comments to the floating point code which will hopefully help the next person who comes along and tries to figure out what is going on.

Mark Brown (2):
KVM: arm64: Add comments for context flush and sync callbacks
KVM: arm64: Add some more comments in kvm_hyp_handle_fpsimd()

 arch/arm64/kvm/fpsimd.c                 | 14 ++++++++++----
 arch/arm64/kvm/hyp/include/hyp/switch.h |  4 ++++
 2 files changed, 14 insertions(+), 4 deletions(-)

base-commit: e783362eb54cd99b2cac8b3a9aeac942e6f6ac07

Signature · 6 lines
2.30.2

_______________________________________________
kvmarm mailing list
[email protected]
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
author
#1 lore raw

PATCH 1/2 KVM: arm64: Add comments for context flush and sync callbacks

Add a little bit of information on where _ctxflush_fp() and _ctxsync_fp() are called to help people unfamiliar with the code get up to speed.

---
 arch/arm64/kvm/fpsimd.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)
arch/arm64/kvm/fpsimd.c +10 -4
index 2f48fd362a8c..397fdac75cb1 100644
@@ -84,6 +84,11 @@ void kvm_arch_vcpu_load_fp(struct kvm_vcpu *vcpu)
 		vcpu->arch.flags |= KVM_ARM64_HOST_SVE_ENABLED;
 }
 
+/*
+ * Called just before entering the guest once we are no longer
+ * preemptable. Syncs the host's TIF_FOREIGN_FPSTATE with the KVM
+ * mirror of the flag used by the hypervisor.
+ */
 void kvm_arch_vcpu_ctxflush_fp(struct kvm_vcpu *vcpu)
 {
 	if (test_thread_flag(TIF_FOREIGN_FPSTATE))
@@ -93,10 +98,11 @@ void kvm_arch_vcpu_ctxflush_fp(struct kvm_vcpu *vcpu)
 }
 
 /*
- * If the guest FPSIMD state was loaded, update the host's context
- * tracking data mark the CPU FPSIMD regs as dirty and belonging to vcpu
- * so that they will be written back if the kernel clobbers them due to
- * kernel-mode NEON before re-entry into the guest.
+ * Called just after exiting the guest. If the guest FPSIMD state
+ * was loaded, update the host's context tracking data mark the CPU
+ * FPSIMD regs as dirty and belonging to vcpu so that they will be
+ * written back if the kernel clobbers them due to kernel-mode NEON
+ * before re-entry into the guest.
  */
 void kvm_arch_vcpu_ctxsync_fp(struct kvm_vcpu *vcpu)
 {
Signature · 6 lines
2.30.2

_______________________________________________
kvmarm mailing list
[email protected]
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
author
#2 lore raw

PATCH 2/2 KVM: arm64: Add some more comments in kvm_hyp_handle_fpsimd()

In reply to Mark Brown

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.

---
 arch/arm64/kvm/hyp/include/hyp/switch.h | 4 ++++
 1 file changed, 4 insertions(+)
arch/arm64/kvm/hyp/include/hyp/switch.h +4 -0
index 58e14f8ead23..1995808d8766 100644
@@ -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
Signature · 6 lines
2.30.2

_______________________________________________
kvmarm mailing list
[email protected]
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
maintainer Applied
#3 lore raw
In reply to Mark Brown
Quoted 9 lines · Mark Brown

These couple of patches add a few more comments to the floating point code which will hopefully help the next person who comes along and tries to figure out what is going on.

Mark Brown (2):
KVM: arm64: Add comments for context flush and sync callbacks
KVM: arm64: Add some more comments in kvm_hyp_handle_fpsimd()

[...]

Applied to next, thanks!

[1/2] KVM: arm64: Add comments for context flush and sync callbacks

      commit: 23afc82539cfcce105bf18c5c835c75e463ca349
[2/2] KVM: arm64: Add some more comments in kvm_hyp_handle_fpsimd()
      commit: 01a244decc760b1ae2caa045647d79ff431bf37b

Cheers,

	M.
Signature · 7 lines
Without deviation from the norm, progress is not possible.


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