aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBorislav Petkov <bp@suse.de>2019-03-12 14:39:23 -0400
committerBorislav Petkov <bp@suse.de>2019-03-29 10:34:03 -0400
commit39f0584ee695f1d75f4181b209602b9c49e73821 (patch)
tree3ef81ed5aefb8a8989f6573e4549140076ec4ee2
parent006c077041dc73b9490fffc4c6af5befe0687110 (diff)
x86/mce: Remove mce_report_event()
Calling this function has been wrong for a while now: * Can't call schedule_work() in #MC context. * mce_notify_irq() either. * None of that noodling is needed anymore - all it needs to do is kick the IRQ work which would self-IPI so that once the #MC handler is done, the work queue will run and process queued MCE records. So remove it. Reported-by: Peter Zijlstra <peterz@infradead.org> Signed-off-by: Borislav Petkov <bp@suse.de> Cc: Tony Luck <tony.luck@intel.com> Cc: x86@kernel.org Link: https://lkml.kernel.org/r/20190325172121.7926-1-bp@alien8.de
-rw-r--r--arch/x86/kernel/cpu/mce/core.c20
1 files changed, 2 insertions, 18 deletions
diff --git a/arch/x86/kernel/cpu/mce/core.c b/arch/x86/kernel/cpu/mce/core.c
index c3498732ba28..58925e7ccb27 100644
--- a/arch/x86/kernel/cpu/mce/core.c
+++ b/arch/x86/kernel/cpu/mce/core.c
@@ -460,23 +460,6 @@ static void mce_irq_work_cb(struct irq_work *entry)
460 mce_schedule_work(); 460 mce_schedule_work();
461} 461}
462 462
463static void mce_report_event(struct pt_regs *regs)
464{
465 if (regs->flags & (X86_VM_MASK|X86_EFLAGS_IF)) {
466 mce_notify_irq();
467 /*
468 * Triggering the work queue here is just an insurance
469 * policy in case the syscall exit notify handler
470 * doesn't run soon enough or ends up running on the
471 * wrong CPU (can happen when audit sleeps)
472 */
473 mce_schedule_work();
474 return;
475 }
476
477 irq_work_queue(&mce_irq_work);
478}
479
480/* 463/*
481 * Check if the address reported by the CPU is in a format we can parse. 464 * Check if the address reported by the CPU is in a format we can parse.
482 * It would be possible to add code for most other cases, but all would 465 * It would be possible to add code for most other cases, but all would
@@ -1331,7 +1314,8 @@ void do_machine_check(struct pt_regs *regs, long error_code)
1331 mce_panic("Fatal machine check on current CPU", &m, msg); 1314 mce_panic("Fatal machine check on current CPU", &m, msg);
1332 1315
1333 if (worst > 0) 1316 if (worst > 0)
1334 mce_report_event(regs); 1317 irq_work_queue(&mce_irq_work);
1318
1335 mce_wrmsrl(MSR_IA32_MCG_STATUS, 0); 1319 mce_wrmsrl(MSR_IA32_MCG_STATUS, 0);
1336 1320
1337 sync_core(); 1321 sync_core();