diff options
author | Borislav Petkov <bp@suse.de> | 2019-03-12 14:39:23 -0400 |
---|---|---|
committer | Borislav Petkov <bp@suse.de> | 2019-03-29 10:34:03 -0400 |
commit | 39f0584ee695f1d75f4181b209602b9c49e73821 (patch) | |
tree | 3ef81ed5aefb8a8989f6573e4549140076ec4ee2 | |
parent | 006c077041dc73b9490fffc4c6af5befe0687110 (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.c | 20 |
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 | ||
463 | static 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(); |