Messages in this thread Patch in this message | | | From | "Chang S. Bae" <> | Subject | [PATCH v9 04/26] x86/fpu/xstate: Add a new variable to indicate dynamic user states | Date | Fri, 30 Jul 2021 07:59:35 -0700 |
| |
The XSTATE per-task buffer is in preparation to be dynamic for user states. Introduce a new mask variable to indicate the 'dynamic' user states. The value is determined at boot-time.
No functional change.
Signed-off-by: Chang S. Bae <chang.seok.bae@intel.com> Reviewed-by: Len Brown <len.brown@intel.com> Cc: x86@kernel.org Cc: linux-kernel@vger.kernel.org --- Changes from v5: * Made the variable __ro_after_init. * Dropped the perf's xstate buffer renaming, as renamed already.
Changes from v3: * Updated the changelog. (Borislav Petkov) * Updated the code comment. (Borislav Petkov)
Changes from v2: * Updated the changelog for clarification. --- arch/x86/include/asm/fpu/xstate.h | 2 ++ arch/x86/kernel/fpu/xstate.c | 9 +++++++++ 2 files changed, 11 insertions(+)
diff --git a/arch/x86/include/asm/fpu/xstate.h b/arch/x86/include/asm/fpu/xstate.h index 2451bccc6cac..bc4cba62906b 100644 --- a/arch/x86/include/asm/fpu/xstate.h +++ b/arch/x86/include/asm/fpu/xstate.h @@ -129,6 +129,8 @@ static inline u64 xfeatures_mask_independent(void) return XFEATURE_MASK_INDEPENDENT; } +extern u64 xfeatures_mask_user_dynamic; + extern u64 xstate_fx_sw_bytes[USER_XSTATE_FX_SW_WORDS]; extern void __init update_regset_xstate_info(unsigned int size, diff --git a/arch/x86/kernel/fpu/xstate.c b/arch/x86/kernel/fpu/xstate.c index d9c029ab9497..74e608c6ad6c 100644 --- a/arch/x86/kernel/fpu/xstate.c +++ b/arch/x86/kernel/fpu/xstate.c @@ -62,6 +62,12 @@ static short xsave_cpuid_features[] __initdata = { u64 xfeatures_mask_all __ro_after_init; EXPORT_SYMBOL_GPL(xfeatures_mask_all); +/* + * This represents user xstates, a subset of xfeatures_mask_all, saved in a + * dynamic kernel XSAVE buffer. + */ +u64 xfeatures_mask_user_dynamic __ro_after_init; + static unsigned int xstate_offsets[XFEATURE_MAX] __ro_after_init = { [ 0 ... XFEATURE_MAX - 1] = -1}; static unsigned int xstate_sizes[XFEATURE_MAX] __ro_after_init = @@ -709,6 +715,7 @@ static int __init init_xstate_size(void) static void fpu__init_disable_system_xstate(void) { xfeatures_mask_all = 0; + xfeatures_mask_user_dynamic = 0; cr4_clear_bits(X86_CR4_OSXSAVE); setup_clear_cpu_cap(X86_FEATURE_XSAVE); } @@ -780,6 +787,8 @@ void __init fpu__init_system_xstate(void) /* Store it for paranoia check at the end */ xfeatures = xfeatures_mask_all; + /* Do not support the dynamically allocated buffer yet. */ + xfeatures_mask_user_dynamic = 0; /* Enable xstate instructions to be able to continue with initialization: */ fpu__init_cpu_xstate(); -- 2.17.1
| |