On Tue, Oct 12, 2021, Borislav Petkov wrote: > On Tue, Oct 12, 2021 at 02:00:19AM +0200, Thomas Gleixner wrote: > > --- 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 But the existing @buf is the userspace pointer, which semantically makes sense because the userspace pointer is the "buffer" and the destination @fpu (and @prku) is vCPU state, not a buffer. That said, I also struggled with the lack of @vcpu. What about prepending vcpu_ to fpu and to pkru? E.g. int fpu_copy_kvm_uabi_to_vcpu(struct fpu *vcpu_fpu, const void *buf, u64 xcr0, u32 *vcpu_pkru)