[PATCH 3/7] KVM: arm64: Add save/restore support for FPMR
Mark Brown
broonie at kernel.org
Mon Jul 8 10:34:36 PDT 2024
On Mon, Jul 08, 2024 at 04:44:34PM +0100, Marc Zyngier wrote:
> Just like the rest of the FP/SIMD state, FPMR needs to be context
> switched.
> The only interesting thing here is that we need to treat the pKVM
> part a bit differently, as the host FP state is never written back
> to the vcpu thread, but instead stored locally and eagerly restored.
> Signed-off-by: Marc Zyngier <maz at kernel.org>
> ---
> arch/arm64/include/asm/kvm_host.h | 10 ++++++++++
> arch/arm64/kvm/fpsimd.c | 1 +
> arch/arm64/kvm/hyp/nvhe/hyp-main.c | 4 ++++
> arch/arm64/kvm/hyp/nvhe/switch.c | 10 ++++++++++
> arch/arm64/kvm/hyp/vhe/switch.c | 4 ++++
> 5 files changed, 29 insertions(+)
I'm possibly missing something here but I'm not seeing where we load the
state for the guest, especially in the VHE case. I would expect to see
a change in kvm_hyp_handle_fpsimd() to load FPMR for guests with the
feature (it needs to be in there to keep in sync with the ownership
tracking for the rest of the FP state, and to avoid loading needlessly
in cases where the guest never touches FP).
Saving for the guest was handled in the previous patch.
> diff --git a/arch/arm64/kvm/hyp/vhe/switch.c b/arch/arm64/kvm/hyp/vhe/switch.c
> index 77010b76c150f..a307c1d5ac874 100644
> --- a/arch/arm64/kvm/hyp/vhe/switch.c
> +++ b/arch/arm64/kvm/hyp/vhe/switch.c
> @@ -312,6 +312,10 @@ static bool kvm_hyp_handle_eret(struct kvm_vcpu *vcpu, u64 *exit_code)
> static void kvm_hyp_save_fpsimd_host(struct kvm_vcpu *vcpu)
> {
> __fpsimd_save_state(*host_data_ptr(fpsimd_state));
> +
> + if (system_supports_fpmr() &&
> + kvm_has_feat(vcpu->kvm, ID_AA64PFR2_EL1, FPMR, IMP))
> + **host_data_ptr(fpmr_ptr) = read_sysreg_s(SYS_FPMR);
> }
That's only saving the host state, it doesn't load the guest state.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20240708/667117d5/attachment.sig>
More information about the linux-arm-kernel
mailing list