linux/arch/x86/kernel/fpu
Thomas Gleixner 7aa5128b5f x86/fpu/xsave: Handle compacted offsets correctly with supervisor states
So far the cached fixed compacted offsets worked, but with (re-)enabling
of ENQCMD this does no longer work with KVM fpstate.

KVM does not have supervisor features enabled for the guest FPU, which
means that KVM has then a different XSAVE area layout than the host FPU
state. This in turn breaks the copy from/to UABI functions when invoked for
a guest state.

Remove the pre-calculated compacted offsets and calculate the offset
of each component at runtime based on the XCOMP_BV field in the XSAVE
header.

The runtime overhead is not interesting because these copy from/to UABI
functions are not used in critical fast paths. KVM uses them to save and
restore FPU state during migration. The host uses them for ptrace and for
the slow path of 32bit signal handling.

Fixes: 7c1ef59145 ("x86/cpufeatures: Re-enable ENQCMD")
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Borislav Petkov <bp@suse.de>
Link: https://lore.kernel.org/r/20220324134623.627636809@linutronix.de
2022-03-30 11:20:36 +02:00
..
bugs.c x86/fpu: Replace the includes of fpu/internal.h 2021-10-20 15:27:29 +02:00
context.h x86/fpu: Update XFD state where required 2021-10-26 10:53:02 +02:00
core.c x86/fpu: Remove redundant XCOMP_BV initialization 2022-03-29 20:57:18 +02:00
init.c x86/fpu: Add fpu_state_config::legacy_features 2021-10-26 10:18:09 +02:00
internal.h x86/fpu/signal: Prepare for variable sigframe length 2021-10-26 10:18:09 +02:00
legacy.h x86/fpu: Remove .fixup usage 2021-12-11 09:09:48 +01:00
Makefile treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
regset.c x86/ptrace: Fix xfpregs_set()'s incorrect xmm clearing 2022-02-18 11:23:21 +01:00
signal.c x86/fpu/signal: Initialize sw_bytes in save_xstate_epilog() 2021-11-30 15:13:47 -08:00
xstate.c x86/fpu/xsave: Handle compacted offsets correctly with supervisor states 2022-03-30 11:20:36 +02:00
xstate.h RISCV: 2022-01-16 16:15:14 +02:00