提交 93a829e8 编写于 作者: B Borislav Petkov 提交者: H. Peter Anvin

x86, cpu: Convert FDIV bug detection

... to the new facility. Add a reference to the wikipedia article
explaining the FDIV test we're doing here.
Signed-off-by: NBorislav Petkov <bp@suse.de>
Link: http://lkml.kernel.org/r/1363788448-31325-4-git-send-email-bp@alien8.deSigned-off-by: NH. Peter Anvin <hpa@zytor.com>
上级 e2604b49
...@@ -223,6 +223,7 @@ ...@@ -223,6 +223,7 @@
#define X86_BUG(x) (NCAPINTS*32 + (x)) #define X86_BUG(x) (NCAPINTS*32 + (x))
#define X86_BUG_F00F X86_BUG(0) /* Intel F00F */ #define X86_BUG_F00F X86_BUG(0) /* Intel F00F */
#define X86_BUG_FDIV X86_BUG(1) /* FPU FDIV */
#if defined(__KERNEL__) && !defined(__ASSEMBLY__) #if defined(__KERNEL__) && !defined(__ASSEMBLY__)
......
...@@ -91,7 +91,6 @@ struct cpuinfo_x86 { ...@@ -91,7 +91,6 @@ struct cpuinfo_x86 {
/* Problems on some 486Dx4's and old 386's: */ /* Problems on some 486Dx4's and old 386's: */
char hard_math; char hard_math;
char rfu; char rfu;
char fdiv_bug;
char coma_bug; char coma_bug;
char pad0; char pad0;
#else #else
......
...@@ -59,7 +59,7 @@ static void __init check_fpu(void) ...@@ -59,7 +59,7 @@ static void __init check_fpu(void)
* trap_init() enabled FXSR and company _before_ testing for FP * trap_init() enabled FXSR and company _before_ testing for FP
* problems here. * problems here.
* *
* Test for the divl bug.. * Test for the divl bug: http://en.wikipedia.org/wiki/Fdiv_bug
*/ */
__asm__("fninit\n\t" __asm__("fninit\n\t"
"fldl %1\n\t" "fldl %1\n\t"
...@@ -75,9 +75,10 @@ static void __init check_fpu(void) ...@@ -75,9 +75,10 @@ static void __init check_fpu(void)
kernel_fpu_end(); kernel_fpu_end();
boot_cpu_data.fdiv_bug = fdiv_bug; if (fdiv_bug) {
if (boot_cpu_data.fdiv_bug) set_cpu_bug(&boot_cpu_data, X86_BUG_FDIV);
pr_warn("Hmm, FPU with FDIV bug\n"); pr_warn("Hmm, FPU with FDIV bug\n");
}
} }
/* /*
......
...@@ -34,7 +34,7 @@ static void show_cpuinfo_misc(struct seq_file *m, struct cpuinfo_x86 *c) ...@@ -34,7 +34,7 @@ static void show_cpuinfo_misc(struct seq_file *m, struct cpuinfo_x86 *c)
"fpu_exception\t: %s\n" "fpu_exception\t: %s\n"
"cpuid level\t: %d\n" "cpuid level\t: %d\n"
"wp\t\t: %s\n", "wp\t\t: %s\n",
c->fdiv_bug ? "yes" : "no", static_cpu_has_bug(X86_BUG_FDIV) ? "yes" : "no",
static_cpu_has_bug(X86_BUG_F00F) ? "yes" : "no", static_cpu_has_bug(X86_BUG_F00F) ? "yes" : "no",
c->coma_bug ? "yes" : "no", c->coma_bug ? "yes" : "no",
c->hard_math ? "yes" : "no", c->hard_math ? "yes" : "no",
......
...@@ -173,12 +173,10 @@ static struct resource bss_resource = { ...@@ -173,12 +173,10 @@ static struct resource bss_resource = {
/* cpu data as detected by the assembly code in head.S */ /* cpu data as detected by the assembly code in head.S */
struct cpuinfo_x86 new_cpu_data __cpuinitdata = { struct cpuinfo_x86 new_cpu_data __cpuinitdata = {
.wp_works_ok = -1, .wp_works_ok = -1,
.fdiv_bug = -1,
}; };
/* common cpu data for all cpus */ /* common cpu data for all cpus */
struct cpuinfo_x86 boot_cpu_data __read_mostly = { struct cpuinfo_x86 boot_cpu_data __read_mostly = {
.wp_works_ok = -1, .wp_works_ok = -1,
.fdiv_bug = -1,
}; };
EXPORT_SYMBOL(boot_cpu_data); EXPORT_SYMBOL(boot_cpu_data);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册