diff options
-rw-r--r-- | arch/x86/kernel/cpu/mcheck/mce.c | 23 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/mcheck/mce.h | 3 | ||||
-rw-r--r-- | arch/x86/kernel/entry_64.S | 2 |
3 files changed, 15 insertions, 13 deletions
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index 1336280edcc2..d99318b470d8 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c | |||
@@ -39,6 +39,16 @@ | |||
39 | 39 | ||
40 | #include "mce.h" | 40 | #include "mce.h" |
41 | 41 | ||
42 | /* Handle unconfigured int18 (should never happen) */ | ||
43 | static void unexpected_machine_check(struct pt_regs *regs, long error_code) | ||
44 | { | ||
45 | printk(KERN_ERR "CPU#%d: Unexpected int18 (Machine Check).\n", | ||
46 | smp_processor_id()); | ||
47 | } | ||
48 | |||
49 | /* Call the installed machine check handler for this CPU setup. */ | ||
50 | void (*machine_check_vector)(struct pt_regs *, long error_code) = | ||
51 | unexpected_machine_check; | ||
42 | #ifdef CONFIG_X86_64 | 52 | #ifdef CONFIG_X86_64 |
43 | 53 | ||
44 | #define MISC_MCELOG_MINOR 227 | 54 | #define MISC_MCELOG_MINOR 227 |
@@ -715,6 +725,8 @@ void __cpuinit mcheck_init(struct cpuinfo_x86 *c) | |||
715 | } | 725 | } |
716 | mce_cpu_quirks(c); | 726 | mce_cpu_quirks(c); |
717 | 727 | ||
728 | machine_check_vector = do_machine_check; | ||
729 | |||
718 | mce_init(NULL); | 730 | mce_init(NULL); |
719 | mce_cpu_features(c); | 731 | mce_cpu_features(c); |
720 | mce_init_timer(); | 732 | mce_init_timer(); |
@@ -1285,17 +1297,6 @@ int mce_disabled; | |||
1285 | int nr_mce_banks; | 1297 | int nr_mce_banks; |
1286 | EXPORT_SYMBOL_GPL(nr_mce_banks); /* non-fatal.o */ | 1298 | EXPORT_SYMBOL_GPL(nr_mce_banks); /* non-fatal.o */ |
1287 | 1299 | ||
1288 | /* Handle unconfigured int18 (should never happen) */ | ||
1289 | static void unexpected_machine_check(struct pt_regs *regs, long error_code) | ||
1290 | { | ||
1291 | printk(KERN_ERR "CPU#%d: Unexpected int18 (Machine Check).\n", | ||
1292 | smp_processor_id()); | ||
1293 | } | ||
1294 | |||
1295 | /* Call the installed machine check handler for this CPU setup. */ | ||
1296 | void (*machine_check_vector)(struct pt_regs *, long error_code) = | ||
1297 | unexpected_machine_check; | ||
1298 | |||
1299 | /* This has to be run for each processor */ | 1300 | /* This has to be run for each processor */ |
1300 | void mcheck_init(struct cpuinfo_x86 *c) | 1301 | void mcheck_init(struct cpuinfo_x86 *c) |
1301 | { | 1302 | { |
diff --git a/arch/x86/kernel/cpu/mcheck/mce.h b/arch/x86/kernel/cpu/mcheck/mce.h index cd6cffcc2de0..966ae3c5cb11 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.h +++ b/arch/x86/kernel/cpu/mcheck/mce.h | |||
@@ -7,11 +7,12 @@ void intel_p5_mcheck_init(struct cpuinfo_x86 *c); | |||
7 | void intel_p6_mcheck_init(struct cpuinfo_x86 *c); | 7 | void intel_p6_mcheck_init(struct cpuinfo_x86 *c); |
8 | void winchip_mcheck_init(struct cpuinfo_x86 *c); | 8 | void winchip_mcheck_init(struct cpuinfo_x86 *c); |
9 | 9 | ||
10 | #ifdef CONFIG_X86_32 | ||
11 | 10 | ||
12 | /* Call the installed machine check handler for this CPU setup. */ | 11 | /* Call the installed machine check handler for this CPU setup. */ |
13 | extern void (*machine_check_vector)(struct pt_regs *, long error_code); | 12 | extern void (*machine_check_vector)(struct pt_regs *, long error_code); |
14 | 13 | ||
14 | #ifdef CONFIG_X86_32 | ||
15 | |||
15 | extern int nr_mce_banks; | 16 | extern int nr_mce_banks; |
16 | 17 | ||
17 | void intel_set_thermal_handler(void); | 18 | void intel_set_thermal_handler(void); |
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index 38946c6e8433..63276c45bffa 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S | |||
@@ -1382,7 +1382,7 @@ paranoiderrorentry stack_segment do_stack_segment | |||
1382 | errorentry general_protection do_general_protection | 1382 | errorentry general_protection do_general_protection |
1383 | errorentry page_fault do_page_fault | 1383 | errorentry page_fault do_page_fault |
1384 | #ifdef CONFIG_X86_MCE | 1384 | #ifdef CONFIG_X86_MCE |
1385 | paranoidzeroentry machine_check do_machine_check | 1385 | paranoidzeroentry machine_check *machine_check_vector(%rip) |
1386 | #endif | 1386 | #endif |
1387 | 1387 | ||
1388 | /* | 1388 | /* |