Currently KVM allocates two FPU structs which are used for saving the user state of the vCPU thread and restoring the guest state when entering vcpu_run() and doing the reverse operation before leaving vcpu_run(). With the new fpstate mechanism this can be reduced to one extra buffer by swapping the fpstate pointer in current::thread::fpu. This makes also the upcoming support for AMX and XFD simpler because then fpstate information (features, sizes, xfd) are always consistent and it does not require any nasty workarounds. The following series cleans that up and replaces the current scheme with a single guest state which is switched in when entering vcpu_run() and switched out before leaving it. The rework is valuable even without AMX/XFD because it consumes less memory and when swapping the fpstates there is no memory copy required when TIF_NEED_LOAD_FPU is set on the going out fpstate. The series is based on: git://git.kernel.org/pub/scm/linux/kernel/git/tglx/devel.git x86/fpu-3 and available from git: git://git.kernel.org/pub/scm/linux/kernel/git/tglx/devel.git x86/fpu-3-kvm V1 can be found here: https://lore.kernel.org/r/20211017151447.829495362@xxxxxxxxxxxxx Changes vs. V1: Drop the restore_mask argument as the result is constant anyway - Paolo Thanks, tglx --- include/asm/fpu/api.h | 19 ++++++-- include/asm/fpu/types.h | 44 ++++++++++++++++++- include/asm/kvm_host.h | 7 --- kernel/fpu/core.c | 111 ++++++++++++++++++++++++++++++++---------------- kvm/svm/svm.c | 7 +-- kvm/x86.c | 88 ++++++++++---------------------------- 6 files changed, 164 insertions(+), 112 deletions(-)