aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/include/asm/mce.h8
-rw-r--r--arch/x86/kernel/cpu/mcheck/mce.c8
-rw-r--r--arch/x86/kernel/cpu/mcheck/p5.c12
3 files changed, 11 insertions, 17 deletions
diff --git a/arch/x86/include/asm/mce.h b/arch/x86/include/asm/mce.h
index aae6fe2112f9..6568cdedcd89 100644
--- a/arch/x86/include/asm/mce.h
+++ b/arch/x86/include/asm/mce.h
@@ -107,6 +107,7 @@ struct mce_log {
107#include <asm/atomic.h> 107#include <asm/atomic.h>
108 108
109extern int mce_disabled; 109extern int mce_disabled;
110extern int mce_p5_enabled;
110 111
111#ifdef CONFIG_X86_OLD_MCE 112#ifdef CONFIG_X86_OLD_MCE
112void amd_mcheck_init(struct cpuinfo_x86 *c); 113void amd_mcheck_init(struct cpuinfo_x86 *c);
@@ -117,14 +118,11 @@ void intel_p6_mcheck_init(struct cpuinfo_x86 *c);
117#ifdef CONFIG_X86_ANCIENT_MCE 118#ifdef CONFIG_X86_ANCIENT_MCE
118void intel_p5_mcheck_init(struct cpuinfo_x86 *c); 119void intel_p5_mcheck_init(struct cpuinfo_x86 *c);
119void winchip_mcheck_init(struct cpuinfo_x86 *c); 120void winchip_mcheck_init(struct cpuinfo_x86 *c);
120extern int mce_p5_enable; 121static inline void enable_p5_mce(void) { mce_p5_enabled = 1; }
121static inline int mce_p5_enabled(void) { return mce_p5_enable; }
122static inline void enable_p5_mce(void) { mce_p5_enable = 1; }
123#else 122#else
124static inline void intel_p5_mcheck_init(struct cpuinfo_x86 *c) {} 123static inline void intel_p5_mcheck_init(struct cpuinfo_x86 *c) {}
125static inline void winchip_mcheck_init(struct cpuinfo_x86 *c) {} 124static inline void winchip_mcheck_init(struct cpuinfo_x86 *c) {}
126static inline int mce_p5_enabled(void) { return 0; } 125static inline void enable_p5_mce(void) {}
127static inline void enable_p5_mce(void) { }
128#endif 126#endif
129 127
130/* Call the installed machine check handler for this CPU setup. */ 128/* Call the installed machine check handler for this CPU setup. */
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
index faedd776847d..6095e0296abd 100644
--- a/arch/x86/kernel/cpu/mcheck/mce.c
+++ b/arch/x86/kernel/cpu/mcheck/mce.c
@@ -1286,8 +1286,7 @@ static void __cpuinit mce_ancient_init(struct cpuinfo_x86 *c)
1286 return; 1286 return;
1287 switch (c->x86_vendor) { 1287 switch (c->x86_vendor) {
1288 case X86_VENDOR_INTEL: 1288 case X86_VENDOR_INTEL:
1289 if (mce_p5_enabled()) 1289 intel_p5_mcheck_init(c);
1290 intel_p5_mcheck_init(c);
1291 break; 1290 break;
1292 case X86_VENDOR_CENTAUR: 1291 case X86_VENDOR_CENTAUR:
1293 winchip_mcheck_init(c); 1292 winchip_mcheck_init(c);
@@ -2002,7 +2001,7 @@ EXPORT_SYMBOL_GPL(nr_mce_banks); /* non-fatal.o */
2002/* This has to be run for each processor */ 2001/* This has to be run for each processor */
2003void mcheck_init(struct cpuinfo_x86 *c) 2002void mcheck_init(struct cpuinfo_x86 *c)
2004{ 2003{
2005 if (mce_disabled == 1) 2004 if (mce_disabled)
2006 return; 2005 return;
2007 2006
2008 switch (c->x86_vendor) { 2007 switch (c->x86_vendor) {
@@ -2032,10 +2031,9 @@ void mcheck_init(struct cpuinfo_x86 *c)
2032 2031
2033static int __init mcheck_enable(char *str) 2032static int __init mcheck_enable(char *str)
2034{ 2033{
2035 mce_disabled = -1; 2034 mce_p5_enabled = 1;
2036 return 1; 2035 return 1;
2037} 2036}
2038
2039__setup("mce", mcheck_enable); 2037__setup("mce", mcheck_enable);
2040 2038
2041#endif /* CONFIG_X86_OLD_MCE */ 2039#endif /* CONFIG_X86_OLD_MCE */
diff --git a/arch/x86/kernel/cpu/mcheck/p5.c b/arch/x86/kernel/cpu/mcheck/p5.c
index 747853f9188d..5c0e6533d9bc 100644
--- a/arch/x86/kernel/cpu/mcheck/p5.c
+++ b/arch/x86/kernel/cpu/mcheck/p5.c
@@ -14,7 +14,7 @@
14#include <asm/msr.h> 14#include <asm/msr.h>
15 15
16/* By default disabled */ 16/* By default disabled */
17int mce_p5_enable; 17int mce_p5_enabled __read_mostly;
18 18
19/* Machine check handler for Pentium class Intel CPUs: */ 19/* Machine check handler for Pentium class Intel CPUs: */
20static void pentium_machine_check(struct pt_regs *regs, long error_code) 20static void pentium_machine_check(struct pt_regs *regs, long error_code)
@@ -42,15 +42,13 @@ void intel_p5_mcheck_init(struct cpuinfo_x86 *c)
42{ 42{
43 u32 l, h; 43 u32 l, h;
44 44
45 /* Check for MCE support: */ 45 /* Default P5 to off as its often misconnected: */
46 if (!cpu_has(c, X86_FEATURE_MCE)) 46 if (!mce_p5_enabled)
47 return; 47 return;
48 48
49#ifdef CONFIG_X86_OLD_MCE 49 /* Check for MCE support: */
50 /* Default P5 to off as its often misconnected: */ 50 if (!cpu_has(c, X86_FEATURE_MCE))
51 if (mce_disabled != -1)
52 return; 51 return;
53#endif
54 52
55 machine_check_vector = pentium_machine_check; 53 machine_check_vector = pentium_machine_check;
56 /* Make sure the vector pointer is visible before we enable MCEs: */ 54 /* Make sure the vector pointer is visible before we enable MCEs: */