Re: [PATCH 05/10] KVM: arm64: Rework SVE host-save/guest-restore
From: Marc Zyngier <maz@kernel.org>
Date: 2021-03-17 14:56:39
Also in:
kvm, kvmarm
On Wed, 17 Mar 2021 14:29:39 +0000, Will Deacon [off-list ref] wrote:
On Tue, Mar 16, 2021 at 10:13:07AM +0000, Marc Zyngier wrote:quoted
In order to keep the code readable, move the host-save/guest-restore sequences in their own functions, with the following changes: - the hypervisor ZCR is now set from C code - ZCR_EL2 is always used as the EL2 accessor This results in some minor assembler macro rework. No functional change intended. Signed-off-by: Marc Zyngier <maz@kernel.org> --- arch/arm64/include/asm/fpsimdmacros.h | 8 +++-- arch/arm64/include/asm/kvm_hyp.h | 2 +- arch/arm64/kvm/hyp/fpsimd.S | 2 +- arch/arm64/kvm/hyp/include/hyp/switch.h | 41 +++++++++++++++---------- 4 files changed, 33 insertions(+), 20 deletions(-)[...]quoted
diff --git a/arch/arm64/kvm/hyp/include/hyp/switch.h b/arch/arm64/kvm/hyp/include/hyp/switch.h index fb68271c1a0f..d34dc220a1ce 100644 --- a/arch/arm64/kvm/hyp/include/hyp/switch.h +++ b/arch/arm64/kvm/hyp/include/hyp/switch.h@@ -196,6 +196,25 @@ static inline bool __populate_fault_info(struct kvm_vcpu *vcpu) return true; } +static inline void __hyp_sve_save_host(struct kvm_vcpu *vcpu) +{ + struct thread_struct *thread; + + thread = container_of(vcpu->arch.host_fpsimd_state, struct thread_struct, + uw.fpsimd_state); + + __sve_save_state(sve_pffr(thread), &vcpu->arch.host_fpsimd_state->fpsr); +} + +static inline void __hyp_sve_restore_guest(struct kvm_vcpu *vcpu) +{ + if (read_sysreg_s(SYS_ZCR_EL2) != (vcpu_sve_vq(vcpu) - 1))Strictly speaking, we should probably be extracting the LEN field from ZCR_EL2, otherwise this has the potential to go horribly wrong if any of the RES0 bits are allocated in future.
Good point, the equivalent asm macro has a BIC to that effect. I'll fix that in the next round, as there are similar patterns in a number of places.
Other than that: Acked-by: Will Deacon <will@kernel.org>
Thanks, M. -- Without deviation from the norm, progress is not possible. _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel