|
@@ -763,12 +763,17 @@ void machine_check_exception(struct pt_regs *regs)
|
|
if (check_io_access(regs))
|
|
if (check_io_access(regs))
|
|
goto bail;
|
|
goto bail;
|
|
|
|
|
|
- die("Machine check", regs, SIGBUS);
|
|
|
|
-
|
|
|
|
/* Must die if the interrupt is not recoverable */
|
|
/* Must die if the interrupt is not recoverable */
|
|
if (!(regs->msr & MSR_RI))
|
|
if (!(regs->msr & MSR_RI))
|
|
nmi_panic(regs, "Unrecoverable Machine check");
|
|
nmi_panic(regs, "Unrecoverable Machine check");
|
|
|
|
|
|
|
|
+ if (!nested)
|
|
|
|
+ nmi_exit();
|
|
|
|
+
|
|
|
|
+ die("Machine check", regs, SIGBUS);
|
|
|
|
+
|
|
|
|
+ return;
|
|
|
|
+
|
|
bail:
|
|
bail:
|
|
if (!nested)
|
|
if (!nested)
|
|
nmi_exit();
|
|
nmi_exit();
|