summaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/fpu/xsave.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2015-04-25 09:02:51 +0200
committerIngo Molnar <mingo@kernel.org>2015-05-19 15:47:41 +0200
commit89abbe01a46a9f47f8d07e2817704bfcbd8f6f9e (patch)
tree368cec3293b8ca122670b5d841930549d81f690b /arch/x86/kernel/fpu/xsave.c
parentx86/fpu: Remove setup_init_fpu_buf() call from eager_fpu_init() (diff)
downloadlinux-89abbe01a46a9f47f8d07e2817704bfcbd8f6f9e.tar.xz
linux-89abbe01a46a9f47f8d07e2817704bfcbd8f6f9e.zip
x86/fpu: Move all eager-fpu setup code to eager_fpu_init()
The FPU context switch type (lazy or eager) setup code is split into two places currently - move it all to eager_fpu_init(). Note that the code we move will now be executed on non-xstate CPUs as well, but this should be safe: both xfeatures_mask and cpu_has_xsaveopt is 0 there. Reviewed-by: Borislav Petkov <bp@alien8.de> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: Fenghua Yu <fenghua.yu@intel.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Oleg Nesterov <oleg@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to '')
-rw-r--r--arch/x86/kernel/fpu/xsave.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/arch/x86/kernel/fpu/xsave.c b/arch/x86/kernel/fpu/xsave.c
index 097f03e209a6..1b920a170576 100644
--- a/arch/x86/kernel/fpu/xsave.c
+++ b/arch/x86/kernel/fpu/xsave.c
@@ -686,20 +686,6 @@ void fpu__init_system_xstate(void)
prepare_fx_sw_frame();
setup_init_fpu_buf();
- /* Auto enable eagerfpu for xsaveopt */
- if (cpu_has_xsaveopt && eagerfpu != DISABLE)
- eagerfpu = ENABLE;
-
- if (xfeatures_mask & XSTATE_EAGER) {
- if (eagerfpu == DISABLE) {
- pr_err("x86/fpu: eagerfpu switching disabled, disabling the following xstate features: 0x%llx.\n",
- xfeatures_mask & XSTATE_EAGER);
- xfeatures_mask &= ~XSTATE_EAGER;
- } else {
- eagerfpu = ENABLE;
- }
- }
-
pr_info("x86/fpu: Enabled xstate features 0x%llx, context size is 0x%x bytes, using '%s' format.\n",
xfeatures_mask,
xstate_size,
@@ -715,6 +701,20 @@ void __init_refok eager_fpu_init(void)
WARN_ON(current->thread.fpu.fpstate_active);
current_thread_info()->status = 0;
+ /* Auto enable eagerfpu for xsaveopt */
+ if (cpu_has_xsaveopt && eagerfpu != DISABLE)
+ eagerfpu = ENABLE;
+
+ if (xfeatures_mask & XSTATE_EAGER) {
+ if (eagerfpu == DISABLE) {
+ pr_err("x86/fpu: eagerfpu switching disabled, disabling the following xstate features: 0x%llx.\n",
+ xfeatures_mask & XSTATE_EAGER);
+ xfeatures_mask &= ~XSTATE_EAGER;
+ } else {
+ eagerfpu = ENABLE;
+ }
+ }
+
if (eagerfpu == ENABLE)
setup_force_cpu_cap(X86_FEATURE_EAGER_FPU);