On Tue, Oct 12, 2021 at 02:00:19AM +0200, Thomas Gleixner wrote: > Copying a user space buffer to the memory buffer is already available in > the FPU core. The copy mechanism in KVM lacks sanity checks and needs to > use cpuid() to lookup the offset of each component, while the FPU core has > this information cached. > > Make the FPU core variant accessible for KVM and replace the homebrewn > mechanism. I think you mean "homebred" in that patch... or "home brewed", that works too, I think. > Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > Cc: kvm@xxxxxxxxxxxxxxx > Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx> > --- > arch/x86/include/asm/fpu/api.h | 3 + > arch/x86/kernel/fpu/core.c | 38 ++++++++++++++++++++- > arch/x86/kernel/fpu/xstate.c | 3 - > arch/x86/kvm/x86.c | 74 +---------------------------------------- > 4 files changed, 44 insertions(+), 74 deletions(-) > > --- a/arch/x86/include/asm/fpu/api.h > +++ b/arch/x86/include/asm/fpu/api.h > @@ -116,4 +116,7 @@ extern void fpu_init_fpstate_user(struct > /* KVM specific functions */ > extern void fpu_swap_kvm_fpu(struct fpu *save, struct fpu *rstor, u64 restore_mask); > > +struct kvm_vcpu; > +extern int fpu_copy_kvm_uabi_to_vcpu(struct fpu *fpu, const void *buf, u64 xcr0, u32 *pkru); > + > #endif /* _ASM_X86_FPU_API_H */ > --- a/arch/x86/kernel/fpu/core.c > +++ b/arch/x86/kernel/fpu/core.c > @@ -174,7 +174,43 @@ void fpu_swap_kvm_fpu(struct fpu *save, > fpregs_unlock(); > } > EXPORT_SYMBOL_GPL(fpu_swap_kvm_fpu); > -#endif > + > +int fpu_copy_kvm_uabi_to_vcpu(struct fpu *fpu, const void *buf, u64 xcr0, > + u32 *vpkru) Right, except that there's no @vcpu in the args of that function. I guess you could call it fpu_copy_kvm_uabi_to_buf() and that @buf can be vcpu->arch.guest_fpu ... Just a nitpick anyway. -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette