|
@@ -78,13 +78,15 @@ static void fpu__init_system_early_generic(struct cpuinfo_x86 *c)
|
|
|
cr0 &= ~(X86_CR0_TS | X86_CR0_EM);
|
|
|
write_cr0(cr0);
|
|
|
|
|
|
- asm volatile("fninit ; fnstsw %0 ; fnstcw %1"
|
|
|
- : "+m" (fsw), "+m" (fcw));
|
|
|
+ if (!test_bit(X86_FEATURE_FPU, (unsigned long *)cpu_caps_cleared)) {
|
|
|
+ asm volatile("fninit ; fnstsw %0 ; fnstcw %1"
|
|
|
+ : "+m" (fsw), "+m" (fcw));
|
|
|
|
|
|
- if (fsw == 0 && (fcw & 0x103f) == 0x003f)
|
|
|
- set_cpu_cap(c, X86_FEATURE_FPU);
|
|
|
- else
|
|
|
- clear_cpu_cap(c, X86_FEATURE_FPU);
|
|
|
+ if (fsw == 0 && (fcw & 0x103f) == 0x003f)
|
|
|
+ set_cpu_cap(c, X86_FEATURE_FPU);
|
|
|
+ else
|
|
|
+ clear_cpu_cap(c, X86_FEATURE_FPU);
|
|
|
+ }
|
|
|
|
|
|
#ifndef CONFIG_MATH_EMULATION
|
|
|
if (!cpu_has_fpu) {
|