|
@@ -83,6 +83,8 @@ EXPORT_SYMBOL_GPL(used_vectors);
|
|
|
|
|
|
static int ignore_nmis;
|
|
|
|
|
|
+int unknown_nmi_panic;
|
|
|
+
|
|
|
static inline void conditional_sti(struct pt_regs *regs)
|
|
|
{
|
|
|
if (regs->flags & X86_EFLAGS_IF)
|
|
@@ -300,6 +302,13 @@ gp_in_kernel:
|
|
|
die("general protection fault", regs, error_code);
|
|
|
}
|
|
|
|
|
|
+static int __init setup_unknown_nmi_panic(char *str)
|
|
|
+{
|
|
|
+ unknown_nmi_panic = 1;
|
|
|
+ return 1;
|
|
|
+}
|
|
|
+__setup("unknown_nmi_panic", setup_unknown_nmi_panic);
|
|
|
+
|
|
|
static notrace __kprobes void
|
|
|
mem_parity_error(unsigned char reason, struct pt_regs *regs)
|
|
|
{
|
|
@@ -371,7 +380,7 @@ unknown_nmi_error(unsigned char reason, struct pt_regs *regs)
|
|
|
reason, smp_processor_id());
|
|
|
|
|
|
printk(KERN_EMERG "Do you have a strange power saving mode enabled?\n");
|
|
|
- if (panic_on_unrecovered_nmi)
|
|
|
+ if (unknown_nmi_panic || panic_on_unrecovered_nmi)
|
|
|
panic("NMI: Not continuing");
|
|
|
|
|
|
printk(KERN_EMERG "Dazed and confused, but trying to continue\n");
|
|
@@ -397,11 +406,8 @@ static notrace __kprobes void default_do_nmi(struct pt_regs *regs)
|
|
|
if (notify_die(DIE_NMI, "nmi", regs, reason, 2, SIGINT)
|
|
|
== NOTIFY_STOP)
|
|
|
return;
|
|
|
-
|
|
|
- unknown_nmi_error(reason, regs);
|
|
|
-#else
|
|
|
- unknown_nmi_error(reason, regs);
|
|
|
#endif
|
|
|
+ unknown_nmi_error(reason, regs);
|
|
|
|
|
|
return;
|
|
|
}
|