diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/i386/kernel/cpu/mcheck/p6.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/arch/i386/kernel/cpu/mcheck/p6.c b/arch/i386/kernel/cpu/mcheck/p6.c index 3c035b8fa3d9..979b18bc95c1 100644 --- a/arch/i386/kernel/cpu/mcheck/p6.c +++ b/arch/i386/kernel/cpu/mcheck/p6.c | |||
@@ -102,11 +102,16 @@ void __devinit intel_p6_mcheck_init(struct cpuinfo_x86 *c) | |||
102 | wrmsr(MSR_IA32_MCG_CTL, 0xffffffff, 0xffffffff); | 102 | wrmsr(MSR_IA32_MCG_CTL, 0xffffffff, 0xffffffff); |
103 | nr_mce_banks = l & 0xff; | 103 | nr_mce_banks = l & 0xff; |
104 | 104 | ||
105 | /* Don't enable bank 0 on intel P6 cores, it goes bang quickly. */ | 105 | /* |
106 | for (i=1; i<nr_mce_banks; i++) { | 106 | * Following the example in IA-32 SDM Vol 3: |
107 | * - MC0_CTL should not be written | ||
108 | * - Status registers on all banks should be cleared on reset | ||
109 | */ | ||
110 | for (i=1; i<nr_mce_banks; i++) | ||
107 | wrmsr (MSR_IA32_MC0_CTL+4*i, 0xffffffff, 0xffffffff); | 111 | wrmsr (MSR_IA32_MC0_CTL+4*i, 0xffffffff, 0xffffffff); |
112 | |||
113 | for (i=0; i<nr_mce_banks; i++) | ||
108 | wrmsr (MSR_IA32_MC0_STATUS+4*i, 0x0, 0x0); | 114 | wrmsr (MSR_IA32_MC0_STATUS+4*i, 0x0, 0x0); |
109 | } | ||
110 | 115 | ||
111 | set_in_cr4 (X86_CR4_MCE); | 116 | set_in_cr4 (X86_CR4_MCE); |
112 | printk (KERN_INFO "Intel machine check reporting enabled on CPU#%d.\n", | 117 | printk (KERN_INFO "Intel machine check reporting enabled on CPU#%d.\n", |