Re: [PATCH 3/7] KVM: arm64: Add save/restore support for FPMR

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
> ---
>  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.

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux