Messages in this thread Patch in this message | | | Date | Tue, 19 Jun 2018 12:30:17 +0200 | From | Borislav Petkov <> | Subject | Re: [PATCH 2/3 V2] x86/mce: Fix incorrect "Machine check from unknown source" message |
| |
On Wed, May 30, 2018 at 11:26:32AM +0200, Borislav Petkov wrote: > > In "x86/mce: Exit properly when no banks to poll" you > > leap right to the end. I'm wondering whether this can > > ever happen? I mean, if there are no machine check banks, > > then how did we get a machine check? > > Right, so this looks like some remnant from old times, lemme do some > archeology... > > /me goes and dusts off the full history linux repo... > > I found this: > > commit 7dd1e1d805d15ca63d05badf40026629ba75cbc8 > Author: Andi Kleen <ak@suse.de> > Date: Tue Feb 24 17:58:41 2004 -0800 > > [PATCH] New machine check handler for x86-64 > > and there's no mention why the !banks check is there. > > I'm wondering if we should simply remove it. I mean, as you say, if > there are no MCA banks, we won't be running in here in the first > place... > > > Both the original, and your new code, skip the: > > > > mce_wrmsrl(MSR_IA32_MCG_STATUS, 0); > > > > which seems bad. That leaves MCG_STATUS.MCIP set ... so a second > > machine check would just reset the machine. > > That's a good point. It goes away as an issue if we simply drop the > check.
...and gone it is.
--- From: Borislav Petkov <bp@suse.de> Date: Tue, 19 Jun 2018 12:27:02 +0200 Subject: [PATCH] x86/mce: Remove !banks check
If we don't have MCA banks, we won't see machine checks anyway. Drop the check.
Signed-off-by: Borislav Petkov <bp@suse.de> --- arch/x86/kernel/cpu/mcheck/mce.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index ea1521ec7e5b..05d2d15a95bd 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c @@ -1185,9 +1185,6 @@ void do_machine_check(struct pt_regs *regs, long error_code) this_cpu_inc(mce_exception_count); - if (!cfg->banks) - goto out; - mce_gather_info(&m, regs); m.tsc = rdtsc(); @@ -1327,7 +1324,7 @@ void do_machine_check(struct pt_regs *regs, long error_code) if (worst > 0) mce_report_event(regs); mce_wrmsrl(MSR_IA32_MCG_STATUS, 0); -out: + sync_core(); if (worst != MCE_AR_SEVERITY && !kill_it) -- 2.17.0.582.gccdcbd54c SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nürnberg) --
| |