diff options
| author | Ingo Molnar <mingo@kernel.org> | 2015-05-05 11:43:02 +0200 | 
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2015-05-19 15:48:12 +0200 | 
| commit | d364a7656c1855c940dfa4baf4ebcc3c6a9e6fd2 (patch) | |
| tree | 11d4d9bb8038d9d412698661dca4970bd3741ed6 /arch | |
| parent | e1884d69f643c743806ebb9bc9292863ef39e894 (diff) | |
x86/fpu: Fix the 'nofxsr' boot parameter to also clear X86_FEATURE_FXSR_OPT
I tried to simulate an ancient CPU via this option, and
found that it still has fxsr_opt enabled, confusing the
FPU code.
Make the 'nofxsr' option also clear FXSR_OPT flag.
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
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 'arch')
| -rw-r--r-- | arch/x86/kernel/cpu/common.c | 17 | 
1 files changed, 9 insertions, 8 deletions
| diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index d15610b0a4cf..d6fe512441e5 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c @@ -171,6 +171,15 @@ static int __init x86_xsaves_setup(char *s)  }  __setup("noxsaves", x86_xsaves_setup); +static int __init x86_fxsr_setup(char *s) +{ +	setup_clear_cpu_cap(X86_FEATURE_FXSR); +	setup_clear_cpu_cap(X86_FEATURE_FXSR_OPT); +	setup_clear_cpu_cap(X86_FEATURE_XMM); +	return 1; +} +__setup("nofxsr", x86_fxsr_setup); +  #ifdef CONFIG_X86_32  static int cachesize_override = -1;  static int disable_x86_serial_nr = 1; @@ -182,14 +191,6 @@ static int __init cachesize_setup(char *str)  }  __setup("cachesize=", cachesize_setup); -static int __init x86_fxsr_setup(char *s) -{ -	setup_clear_cpu_cap(X86_FEATURE_FXSR); -	setup_clear_cpu_cap(X86_FEATURE_XMM); -	return 1; -} -__setup("nofxsr", x86_fxsr_setup); -  static int __init x86_sep_setup(char *s)  {  	setup_clear_cpu_cap(X86_FEATURE_SEP); | 
