On Wed, Oct 13 2021 at 14:57, Sean Christopherson wrote: > 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) I've renamed them to: fpu_copy_kvm_uabi_to_fpstate() fpu_copy_fpstate_to_kvm_uabi() See https://git.kernel.org/pub/scm/linux/kernel/git/tglx/devel.git/log/?h=x86/fpu-1 Thanks, tglx