From: Fenghua Yu <fenghua...@intel.com> With ever growing extended state registers (xstate) on x86 processors, kernel needs to cope with issue of growing memory space occupied by xstate. The xsave area is holding more and more xstate registers, growing from legacy FP and SSE to AVX, AVX2, AVX-512, MPX, and Intel PT.
The recently introduced compacted format of xsave area saves xstates only for enabled states. This patch set saves the xsave area space per process in compacted format by xsaves/xrstors instructions. xsaves/xrstors also supports modified optimization which tracks modified xstates and only saves modified xstates to xsave area to improve saving performance. For more information about xsaves/xrstors instructions, please refer to latest Intel X86 SDM. Fenghua Yu (15): x86/xsaves: Detect xsaves/xrstors feature x86/xsaves: Add kernel parameter to disable xsaves/xrstors x86/alternative: Add alternative_input_2 x86/xsaves: Change compacted format xsave area header x86/xsaves: Define macros for xsave instructions x86/xsaves: Define macro for handle xsave/xrstor fault x86/xsaves: Use xsaves/xrstors for saving and restoring xsave area x86/xsaves: Use xsaves/xrstors for context switch x86/xsaves: Use xsave/xrstor for saving and restoring user space context x86/xsaves: Clear reserved bits in xsave header x86/xsaves: Add xsaves and xrstors support for booting time x86/xsaves: Save xstate to task's xsave area in __save_fpu during booting time x86/xsaves: Call booting time xsaves and xrstors in setup_init_fpu_buf x86/xsaves: Enable xsaves/xrstors Define kernel API to get address of each state in xsave area Documentation/kernel-parameters.txt | 9 ++ arch/x86/include/asm/alternative.h | 13 ++ arch/x86/include/asm/cpufeature.h | 2 + arch/x86/include/asm/fpu-internal.h | 9 +- arch/x86/include/asm/processor.h | 4 +- arch/x86/include/asm/xsave.h | 220 +++++++++++++++++++++++++--------- arch/x86/include/uapi/asm/msr-index.h | 2 + arch/x86/kernel/cpu/common.c | 8 ++ arch/x86/kernel/cpu/scattered.c | 1 + arch/x86/kernel/i387.c | 2 +- arch/x86/kernel/process.c | 1 + arch/x86/kernel/xsave.c | 112 +++++++++++++++-- 12 files changed, 313 insertions(+), 70 deletions(-) -- 1.8.1.2 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/