Messages in this thread | | | Date | Mon, 17 Aug 2009 11:18:00 +0200 | From | Ingo Molnar <> | Subject | Re: [boot crash] Re: [tip:x86/mce3] x86, mce: use 64bit machine check code on 32bit |
| |
* Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com> wrote:
> Ingo Molnar wrote: > > * Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com> wrote: > >> Could you try boot your laptop with mce=nobootlog? > > > > Hm, why should that make any difference? mce=nobootlog only > > influences whether we pass records into the mcelog buffer but > > does not affect whether we touch the hardware. > > Old mce codes doesn't take bootlog.
I understand what you mean, and i know that we have a number of BIOS workarounds in the code - but i think some of those workarounds are wrong and they dont actually solve anything.
The thing is, mce=nobootlog does _not_ keep us from touching MCE related hardware registers during bootup.
It only inhibits us from doing an mce_log() call:
if (!(flags & MCP_DONTLOG) && !mce_dont_log_ce) { mce_log(&m); add_taint(TAINT_MACHINE_CHECK); }
but an mce_log() call itself only passes on the data we already read from hardware registers, into the MCE ring-buffer (which is a pure software construct).
> One possibility is: if the BIOS doesn't clear status in banks, > new mce codes will try to log such junks. > > If the junk is totally junk but can be decoded as a valid log with > MISCV or ADDRV bit, and if the cpu try to access register which is > not implemented (e.g. IA32_MCi_MISC/ADDR), then such access might > cause a general protection exception. (ref. ASDM 3A 15.3.2.3) > > I'm just guessing...
My point is that mce=nobootlog will only affect whether we call mce_log(). It does not keep us from touching all the MSRs that relate to MCEs.
mce=off does that, and the box boots up fine with that specified (and as expected).
Ingo
| |