|
@@ -999,6 +999,17 @@ void do_machine_check(struct pt_regs *regs, long error_code)
|
|
|
int flags = MF_ACTION_REQUIRED;
|
|
int flags = MF_ACTION_REQUIRED;
|
|
|
int lmce = 0;
|
|
int lmce = 0;
|
|
|
|
|
|
|
|
|
|
+ /* If this CPU is offline, just bail out. */
|
|
|
|
|
+ if (cpu_is_offline(smp_processor_id())) {
|
|
|
|
|
+ u64 mcgstatus;
|
|
|
|
|
+
|
|
|
|
|
+ mcgstatus = mce_rdmsrl(MSR_IA32_MCG_STATUS);
|
|
|
|
|
+ if (mcgstatus & MCG_STATUS_RIPV) {
|
|
|
|
|
+ mce_wrmsrl(MSR_IA32_MCG_STATUS, 0);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
ist_enter(regs);
|
|
ist_enter(regs);
|
|
|
|
|
|
|
|
this_cpu_inc(mce_exception_count);
|
|
this_cpu_inc(mce_exception_count);
|