Re: [PATCH v3 23/40] KVM: x86: Move kvm_{load,put}_guest_fpu() to fpu.h
From: Huang, Kai
Date: Thu Jun 04 2026 - 07:16:06 EST
On Fri, 2026-05-29 at 15:22 -0700, Sean Christopherson wrote:
> Move the kvm_{load,put}_guest_fpu() helpers to fpu.h in anticipation of
> moving the bulk of KVM's register specific code out of x86.c.
>
> No functional change intended.
>
> Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx>
Reviewed-by: Kai Huang <kai.huang@xxxxxxxxx>
> ---
> arch/x86/kvm/fpu.h | 26 ++++++++++++++++++++++++++
> arch/x86/kvm/x86.c | 24 ------------------------
> 2 files changed, 26 insertions(+), 24 deletions(-)
>
> diff --git a/arch/x86/kvm/fpu.h b/arch/x86/kvm/fpu.h
> index f898781b6a06..6b7b628f530d 100644
> --- a/arch/x86/kvm/fpu.h
> +++ b/arch/x86/kvm/fpu.h
> @@ -3,8 +3,34 @@
> #ifndef __KVM_FPU_H_
> #define __KVM_FPU_H_
>
> +#include <linux/kvm_host.h>
> +
> +#include <trace/events/kvm.h>
> +
> #include <asm/fpu/api.h>
>
> +/* Swap (qemu) user FPU context for the guest FPU context. */
> +static inline void kvm_load_guest_fpu(struct kvm_vcpu *vcpu)
> +{
> + if (KVM_BUG_ON(vcpu->arch.guest_fpu.fpstate->in_use, vcpu->kvm))
> + return;
> +
> + /* Exclude PKRU, it's restored separately immediately after VM-Exit. */
> + fpu_swap_kvm_fpstate(&vcpu->arch.guest_fpu, true);
> + trace_kvm_fpu(1);
> +}
> +
> +/* When vcpu_run ends, restore user space FPU context. */
> +static inline void kvm_put_guest_fpu(struct kvm_vcpu *vcpu)
> +{
> + if (KVM_BUG_ON(!vcpu->arch.guest_fpu.fpstate->in_use, vcpu->kvm))
> + return;
> +
> + fpu_swap_kvm_fpstate(&vcpu->arch.guest_fpu, false);
> + ++vcpu->stat.fpu_reload;
> + trace_kvm_fpu(0);
> +}
> +
Nit: to me it's a little bit weird to put the two functions before the typedefs
and macro defines below, though.
> typedef u32 __attribute__((vector_size(16))) sse128_t;
> #define __sse128_u union { sse128_t vec; u64 as_u64[2]; u32 as_u32[4]; }
> #define sse128_lo(x) ({ __sse128_u t; t.vec = x; t.as_u64[0]; })