[PATCH] KVM: arm64: Remove kvm_arch_vcpu_run_map_fp()

Fuad Tabba tabba at google.com
Thu Jun 19 07:35:18 PDT 2025


On Thu, 19 Jun 2025 at 14:48, Mark Rutland <mark.rutland at arm.com> wrote:
>
> Historically KVM hyp code saved the host's FPSIMD state into the hosts's
> fpsimd_state memory, and so it was necessary to map this into the hyp
> Stage-1 mappings before running a vCPU.
>
> This is no longer necessary as of commits:
>
> * fbc7e61195e2 ("KVM: arm64: Unconditionally save+flush host FPSIMD/SVE/SME state")
> * 8eca7f6d5100 ("KVM: arm64: Remove host FPSIMD saving for non-protected KVM")
>
> Since those commits, we eagerly save the host's FPSIMD state before
> calling into hyp to run a vCPU, and hyp code never reads nor writes the
> host's fpsimd_state memory. There's no longer any need to map the host's
> fpsimd_state memory into the hyp Stage-1, and kvm_arch_vcpu_run_map_fp()
> is unnecessary but benign.
>
> Remove kvm_arch_vcpu_run_map_fp(). Currently there is no code to perform
> a corresponding unmap, and we never mapped the host's SVE or SME state
> into the hyp Stage-1, so no other code needs to be removed.
>
> Signed-off-by: Mark Rutland <mark.rutland at arm.com>
> Cc: Catalin Marinas <catalin.marinas at arm.com>
> Cc: Fuad Tabba <tabba at google.com>
> Cc: Marc Zyngier <maz at kernel.org>
> Cc: Mark Brown <broonie at kernel.org>
> Cc: Oliver Upton <oliver.upton at linux.dev>
> Cc: Will Deacon <will at kernel.org>
> Cc: kvmarm at lists.linux.dev
> ---
>  arch/arm64/include/asm/kvm_host.h |  1 -
>  arch/arm64/kvm/arm.c              |  4 ----
>  arch/arm64/kvm/fpsimd.c           | 26 --------------------------
>  3 files changed, 31 deletions(-)

Tested-by: Fuad Tabba <tabba at google.com>
Reviewed-by: Fuad Tabba <tabba at google.com>

Thanks!
/fuad

> diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
> index 5ccca509dff1a..f7ad74404202b 100644
> --- a/arch/arm64/include/asm/kvm_host.h
> +++ b/arch/arm64/include/asm/kvm_host.h
> @@ -1482,7 +1482,6 @@ int kvm_vm_ioctl_get_reg_writable_masks(struct kvm *kvm,
>                                         struct reg_mask_range *range);
>
>  /* Guest/host FPSIMD coordination helpers */
> -int kvm_arch_vcpu_run_map_fp(struct kvm_vcpu *vcpu);
>  void kvm_arch_vcpu_load_fp(struct kvm_vcpu *vcpu);
>  void kvm_arch_vcpu_ctxflush_fp(struct kvm_vcpu *vcpu);
>  void kvm_arch_vcpu_ctxsync_fp(struct kvm_vcpu *vcpu);
> diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c
> index de2b4e9c9f9fb..1502faa460863 100644
> --- a/arch/arm64/kvm/arm.c
> +++ b/arch/arm64/kvm/arm.c
> @@ -825,10 +825,6 @@ int kvm_arch_vcpu_run_pid_change(struct kvm_vcpu *vcpu)
>         if (!kvm_arm_vcpu_is_finalized(vcpu))
>                 return -EPERM;
>
> -       ret = kvm_arch_vcpu_run_map_fp(vcpu);
> -       if (ret)
> -               return ret;
> -
>         if (likely(vcpu_has_run_once(vcpu)))
>                 return 0;
>
> diff --git a/arch/arm64/kvm/fpsimd.c b/arch/arm64/kvm/fpsimd.c
> index 8f6c8f57c6b9c..15e17aca1dec0 100644
> --- a/arch/arm64/kvm/fpsimd.c
> +++ b/arch/arm64/kvm/fpsimd.c
> @@ -14,32 +14,6 @@
>  #include <asm/kvm_mmu.h>
>  #include <asm/sysreg.h>
>
> -/*
> - * Called on entry to KVM_RUN unless this vcpu previously ran at least
> - * once and the most recent prior KVM_RUN for this vcpu was called from
> - * the same task as current (highly likely).
> - *
> - * This is guaranteed to execute before kvm_arch_vcpu_load_fp(vcpu),
> - * such that on entering hyp the relevant parts of current are already
> - * mapped.
> - */
> -int kvm_arch_vcpu_run_map_fp(struct kvm_vcpu *vcpu)
> -{
> -       struct user_fpsimd_state *fpsimd = &current->thread.uw.fpsimd_state;
> -       int ret;
> -
> -       /* pKVM has its own tracking of the host fpsimd state. */
> -       if (is_protected_kvm_enabled())
> -               return 0;
> -
> -       /* Make sure the host task fpsimd state is visible to hyp: */
> -       ret = kvm_share_hyp(fpsimd, fpsimd + 1);
> -       if (ret)
> -               return ret;
> -
> -       return 0;
> -}
> -
>  /*
>   * Prepare vcpu for saving the host's FPSIMD state and loading the guest's.
>   * The actual loading is done by the FPSIMD access trap taken to hyp.
> --
> 2.30.2
>



More information about the linux-arm-kernel mailing list