diff options
Diffstat (limited to 'arch/x86/kernel/cpu/mcheck/p6.c')
-rw-r--r-- | arch/x86/kernel/cpu/mcheck/p6.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/arch/x86/kernel/cpu/mcheck/p6.c b/arch/x86/kernel/cpu/mcheck/p6.c index deeae42ce199..74342604d30e 100644 --- a/arch/x86/kernel/cpu/mcheck/p6.c +++ b/arch/x86/kernel/cpu/mcheck/p6.c | |||
@@ -16,7 +16,7 @@ | |||
16 | #include "mce.h" | 16 | #include "mce.h" |
17 | 17 | ||
18 | /* Machine Check Handler For PII/PIII */ | 18 | /* Machine Check Handler For PII/PIII */ |
19 | static fastcall void intel_machine_check(struct pt_regs * regs, long error_code) | 19 | static void intel_machine_check(struct pt_regs * regs, long error_code) |
20 | { | 20 | { |
21 | int recover=1; | 21 | int recover=1; |
22 | u32 alow, ahigh, high, low; | 22 | u32 alow, ahigh, high, low; |
@@ -27,27 +27,30 @@ static fastcall void intel_machine_check(struct pt_regs * regs, long error_code) | |||
27 | if (mcgstl & (1<<0)) /* Recoverable ? */ | 27 | if (mcgstl & (1<<0)) /* Recoverable ? */ |
28 | recover=0; | 28 | recover=0; |
29 | 29 | ||
30 | printk (KERN_EMERG "CPU %d: Machine Check Exception: %08x%08x\n", | 30 | printk(KERN_EMERG "CPU %d: Machine Check Exception: %08x%08x\n", |
31 | smp_processor_id(), mcgsth, mcgstl); | 31 | smp_processor_id(), mcgsth, mcgstl); |
32 | 32 | ||
33 | for (i=0; i<nr_mce_banks; i++) { | 33 | for (i = 0; i < nr_mce_banks; i++) { |
34 | rdmsr (MSR_IA32_MC0_STATUS+i*4,low, high); | 34 | rdmsr(MSR_IA32_MC0_STATUS+i*4, low, high); |
35 | if (high & (1<<31)) { | 35 | if (high & (1<<31)) { |
36 | char misc[20]; | ||
37 | char addr[24]; | ||
38 | misc[0] = addr[0] = '\0'; | ||
36 | if (high & (1<<29)) | 39 | if (high & (1<<29)) |
37 | recover |= 1; | 40 | recover |= 1; |
38 | if (high & (1<<25)) | 41 | if (high & (1<<25)) |
39 | recover |= 2; | 42 | recover |= 2; |
40 | printk (KERN_EMERG "Bank %d: %08x%08x", i, high, low); | ||
41 | high &= ~(1<<31); | 43 | high &= ~(1<<31); |
42 | if (high & (1<<27)) { | 44 | if (high & (1<<27)) { |
43 | rdmsr (MSR_IA32_MC0_MISC+i*4, alow, ahigh); | 45 | rdmsr(MSR_IA32_MC0_MISC+i*4, alow, ahigh); |
44 | printk ("[%08x%08x]", ahigh, alow); | 46 | snprintf(misc, 20, "[%08x%08x]", ahigh, alow); |
45 | } | 47 | } |
46 | if (high & (1<<26)) { | 48 | if (high & (1<<26)) { |
47 | rdmsr (MSR_IA32_MC0_ADDR+i*4, alow, ahigh); | 49 | rdmsr(MSR_IA32_MC0_ADDR+i*4, alow, ahigh); |
48 | printk (" at %08x%08x", ahigh, alow); | 50 | snprintf(addr, 24, " at %08x%08x", ahigh, alow); |
49 | } | 51 | } |
50 | printk ("\n"); | 52 | printk(KERN_EMERG "CPU %d: Bank %d: %08x%08x%s%s\n", |
53 | smp_processor_id(), i, high, low, misc, addr); | ||
51 | } | 54 | } |
52 | } | 55 | } |
53 | 56 | ||