diff options
| -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(); |
