[ Sasha's backport helper bot ]
Hi,
Summary of potential issues: ⚠️ Found follow-up fixes in mainline
The upstream commit SHA1 provided is correct: 8383741ab2e773a992f1f0f8acdca5e7a4687c49
WARNING: Author mismatch between patch and upstream commit: Backport author: Mark Brownbroonie@kernel.org Commit author: Marc Zyngiermaz@kernel.org
Status in newer kernel trees: 6.14.y | Present (exact SHA1) 6.13.y | Present (exact SHA1) 6.12.y | Present (exact SHA1) 6.6.y | Present (exact SHA1) 6.1.y | Present (exact SHA1)
Found fixes commits: d52d165d67c5 KVM: arm64: Always start with clearing SVE flag on load
Note: The patch differs from the upstream commit: --- 1: 8383741ab2e77 ! 1: e6a9fd27335d3 KVM: arm64: Get rid of host SVE tracking/saving @@ Metadata ## Commit message ## KVM: arm64: Get rid of host SVE tracking/saving
+ [ Upstream commit 8383741ab2e773a992f1f0f8acdca5e7a4687c49 ] + The SVE host tracking in KVM is pretty involved. It relies on a set of flags tracking the ownership of the SVE register, as well as that of the EL0 access. @@ Commit message
Reviewed-by: Mark Brown broonie@kernel.org Signed-off-by: Marc Zyngier maz@kernel.org + Signed-off-by: Mark Brown broonie@kernel.org
## arch/arm64/include/asm/kvm_host.h ## @@ arch/arm64/include/asm/kvm_host.h: struct kvm_vcpu_arch { @@ arch/arm64/kvm/fpsimd.c: void kvm_arch_vcpu_put_fp(struct kvm_vcpu *vcpu)
## arch/arm64/kvm/hyp/include/hyp/switch.h ## @@ arch/arm64/kvm/hyp/include/hyp/switch.h: static inline bool __populate_fault_info(struct kvm_vcpu *vcpu) - return __get_fault_info(vcpu->arch.fault.esr_el2, &vcpu->arch.fault); + return __get_fault_info(esr, &vcpu->arch.fault); }
-static inline void __hyp_sve_save_host(struct kvm_vcpu *vcpu) @@ arch/arm64/kvm/hyp/include/hyp/switch.h: static inline bool __populate_fault_inf { sve_cond_update_zcr_vq(vcpu_sve_max_vq(vcpu) - 1, SYS_ZCR_EL2); @@ arch/arm64/kvm/hyp/include/hyp/switch.h: static inline void __hyp_sve_restore_guest(struct kvm_vcpu *vcpu) - */ - static bool kvm_hyp_handle_fpsimd(struct kvm_vcpu *vcpu, u64 *exit_code) + /* Check for an FPSIMD/SVE trap and handle as appropriate */ + static inline bool __hyp_handle_fpsimd(struct kvm_vcpu *vcpu) { - bool sve_guest, sve_host; + bool sve_guest; @@ arch/arm64/kvm/hyp/include/hyp/switch.h: static inline void __hyp_sve_restore_gu - + sve_guest = vcpu_has_sve(vcpu); esr_ec = kvm_vcpu_trap_get_class(vcpu); - - /* Don't handle SVE traps for non-SVE vcpus here: */ -@@ arch/arm64/kvm/hyp/include/hyp/switch.h: static bool kvm_hyp_handle_fpsimd(struct kvm_vcpu *vcpu, u64 *exit_code) + if (esr_ec != ESR_ELx_EC_FP_ASIMD && + esr_ec != ESR_ELx_EC_SVE) +@@ arch/arm64/kvm/hyp/include/hyp/switch.h: static inline bool __hyp_handle_fpsimd(struct kvm_vcpu *vcpu) isb();
if (vcpu->arch.flags & KVM_ARM64_FP_HOST) { ---
Results of testing on various branches:
| Branch | Patch Apply | Build Test | |---------------------------|-------------|------------| | stable/linux-5.15.y | Success | Success |