x86: mce: Ignore machine checks on offlined CPUs
Don't process machine checks on offlined CPUs. This avoids
problems with MCE rendevouzous getting out of sync when
a machine check happens on a offlined CPUs.
Signed-off-by: Andi Kleen <ak@linux.intel.com>
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
index a63e956..480d0f0 100644
--- a/arch/x86/kernel/cpu/mcheck/mce.c
+++ b/arch/x86/kernel/cpu/mcheck/mce.c
@@ -953,10 +953,19 @@
DECLARE_BITMAP(toclear, MAX_NR_BANKS);
char *msg = "Unknown";
- atomic_inc(&mce_entry);
-
percpu_inc(mce_exception_count);
+ /*
+ * Ignore machine checks on offlined CPUs.
+ */
+ if (!cpu_online(raw_smp_processor_id())) {
+ mce_wrmsrl(MSR_IA32_MCG_STATUS, 0);
+ sync_core();
+ return;
+ }
+
+ atomic_inc(&mce_entry);
+
if (notify_die(DIE_NMI, "machine check", regs, error_code,
18, SIGKILL) == NOTIFY_STOP)
goto out;