diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2009-07-28 17:52:54 -0400 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2009-07-29 18:41:45 -0400 |
commit | 94699b04eddd4b247d871930431d6fa1a46c175e (patch) | |
tree | a76a306d70d629490094cb202de5813d648b3592 /arch | |
parent | 3ccdccfadbd2548abe38682b587f4ba27eac2fc9 (diff) |
x86, mce: don't log boot MCEs on Pentium M (model == 13) CPUs
On my legacy Pentium M laptop (Acer Extensa 2900) I get bogus MCE on a cold
boot with CONFIG_X86_NEW_MCE enabled, i.e. (after decoding it with mcelog):
MCE 0
HARDWARE ERROR. This is *NOT* a software problem!
Please contact your hardware vendor
CPU 0 BANK 1 MCG status:
MCi status:
Error overflow
Uncorrected error
Error enabled
Processor context corrupt
MCA: Data CACHE Level-1 UNKNOWN Error
STATUS f200000000000195 MCGSTATUS 0
[ The other STATUS values observed: f2000000000001b5 (... UNKNOWN error)
and f200000000000115 (... READ Error).
To verify that this is not a CONFIG_X86_NEW_MCE bug I also modified
the CONFIG_X86_OLD_MCE code (which doesn't log any MCEs) to dump
content of STATUS MSR before it is cleared during initialization. ]
Since the bogus MCE results in a kernel taint (which in turn disables
lockdep support) don't log boot MCEs on Pentium M (model == 13) CPUs
by default ("mce=bootlog" boot parameter can be be used to get the old
behavior).
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Reviewed-by: Andi Kleen <andi@firstfloor.org>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/kernel/cpu/mcheck/mce.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index 07139a0578e3..7bd19c7f5315 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c | |||
@@ -1269,6 +1269,10 @@ static void mce_cpu_quirks(struct cpuinfo_x86 *c) | |||
1269 | if ((c->x86 > 6 || (c->x86 == 6 && c->x86_model >= 0xe)) && | 1269 | if ((c->x86 > 6 || (c->x86 == 6 && c->x86_model >= 0xe)) && |
1270 | monarch_timeout < 0) | 1270 | monarch_timeout < 0) |
1271 | monarch_timeout = USEC_PER_SEC; | 1271 | monarch_timeout = USEC_PER_SEC; |
1272 | |||
1273 | /* There are also broken BIOSes on some Pentium M systems. */ | ||
1274 | if (c->x86 == 6 && c->x86_model == 13 && mce_bootlog < 0) | ||
1275 | mce_bootlog = 0; | ||
1272 | } | 1276 | } |
1273 | if (monarch_timeout < 0) | 1277 | if (monarch_timeout < 0) |
1274 | monarch_timeout = 0; | 1278 | monarch_timeout = 0; |