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;