Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c7f6fa44 authored by Bartlomiej Zolnierkiewicz's avatar Bartlomiej Zolnierkiewicz Committed by Ingo Molnar
Browse files

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: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Reviewed-by: default avatarAndi Kleen <andi@firstfloor.org>
Signed-off-by: default avatarH. Peter Anvin <hpa@zytor.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 52459ab9
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -1273,6 +1273,10 @@ static void mce_cpu_quirks(struct cpuinfo_x86 *c)
		if ((c->x86 > 6 || (c->x86 == 6 && c->x86_model >= 0xe)) &&
		if ((c->x86 > 6 || (c->x86 == 6 && c->x86_model >= 0xe)) &&
			monarch_timeout < 0)
			monarch_timeout < 0)
			monarch_timeout = USEC_PER_SEC;
			monarch_timeout = USEC_PER_SEC;

		/* There are also broken BIOSes on some Pentium M systems. */
		if (c->x86 == 6 && c->x86_model == 13 && mce_bootlog < 0)
			mce_bootlog = 0;
	}
	}
	if (monarch_timeout < 0)
	if (monarch_timeout < 0)
		monarch_timeout = 0;
		monarch_timeout = 0;