|
@@ -76,7 +76,9 @@ asmlinkage void alignment_check(void);
|
|
|
asmlinkage void machine_check(void);
|
|
|
asmlinkage void spurious_interrupt_bug(void);
|
|
|
|
|
|
+int panic_on_unrecovered_nmi;
|
|
|
static unsigned int code_bytes = 64;
|
|
|
+static unsigned ignore_nmis;
|
|
|
|
|
|
static inline void conditional_sti(struct pt_regs *regs)
|
|
|
{
|
|
@@ -867,6 +869,28 @@ asmlinkage notrace __kprobes void default_do_nmi(struct pt_regs *regs)
|
|
|
io_check_error(reason, regs);
|
|
|
}
|
|
|
|
|
|
+asmlinkage notrace __kprobes void
|
|
|
+do_nmi(struct pt_regs *regs, long error_code)
|
|
|
+{
|
|
|
+ nmi_enter();
|
|
|
+ add_pda(__nmi_count, 1);
|
|
|
+ if (!ignore_nmis)
|
|
|
+ default_do_nmi(regs);
|
|
|
+ nmi_exit();
|
|
|
+}
|
|
|
+
|
|
|
+void stop_nmi(void)
|
|
|
+{
|
|
|
+ acpi_nmi_disable();
|
|
|
+ ignore_nmis++;
|
|
|
+}
|
|
|
+
|
|
|
+void restart_nmi(void)
|
|
|
+{
|
|
|
+ ignore_nmis--;
|
|
|
+ acpi_nmi_enable();
|
|
|
+}
|
|
|
+
|
|
|
/* runs on IST stack. */
|
|
|
asmlinkage void __kprobes do_int3(struct pt_regs * regs, long error_code)
|
|
|
{
|