nmi_watchdog: Config option to enable new nmi_watchdog
These are the bits that enable the new nmi_watchdog and safely isolate the old nmi_watchdog. Only one or the other can run, not both at the same time. Signed-off-by: Don Zickus <dzickus@redhat.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: gorcunov@gmail.com Cc: aris@redhat.com Cc: peterz@infradead.org LKML-Reference: <1265424425-31562-4-git-send-email-dzickus@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
1fb9d6ad27
commit
84e478c6f1
5 changed files with 26 additions and 1 deletions
|
@ -2,7 +2,12 @@
|
||||||
# Makefile for local APIC drivers and for the IO-APIC code
|
# Makefile for local APIC drivers and for the IO-APIC code
|
||||||
#
|
#
|
||||||
|
|
||||||
obj-$(CONFIG_X86_LOCAL_APIC) += apic.o apic_noop.o probe_$(BITS).o ipi.o nmi.o
|
obj-$(CONFIG_X86_LOCAL_APIC) += apic.o apic_noop.o probe_$(BITS).o ipi.o
|
||||||
|
ifneq ($(CONFIG_NMI_WATCHDOG),y)
|
||||||
|
obj-$(CONFIG_X86_LOCAL_APIC) += nmi.o
|
||||||
|
endif
|
||||||
|
obj-$(CONFIG_NMI_WATCHDOG) += hw_nmi.o
|
||||||
|
|
||||||
obj-$(CONFIG_X86_IO_APIC) += io_apic.o
|
obj-$(CONFIG_X86_IO_APIC) += io_apic.o
|
||||||
obj-$(CONFIG_SMP) += ipi.o
|
obj-$(CONFIG_SMP) += ipi.o
|
||||||
|
|
||||||
|
|
|
@ -406,6 +406,7 @@ static notrace __kprobes void default_do_nmi(struct pt_regs *regs)
|
||||||
== NOTIFY_STOP)
|
== NOTIFY_STOP)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
#ifndef CONFIG_NMI_WATCHDOG
|
||||||
/*
|
/*
|
||||||
* Ok, so this is none of the documented NMI sources,
|
* Ok, so this is none of the documented NMI sources,
|
||||||
* so it must be the NMI watchdog.
|
* so it must be the NMI watchdog.
|
||||||
|
@ -413,6 +414,7 @@ static notrace __kprobes void default_do_nmi(struct pt_regs *regs)
|
||||||
if (nmi_watchdog_tick(regs, reason))
|
if (nmi_watchdog_tick(regs, reason))
|
||||||
return;
|
return;
|
||||||
if (!do_nmi_callback(regs, cpu))
|
if (!do_nmi_callback(regs, cpu))
|
||||||
|
#endif /* !CONFIG_NMI_WATCHDOG */
|
||||||
unknown_nmi_error(reason, regs);
|
unknown_nmi_error(reason, regs);
|
||||||
#else
|
#else
|
||||||
unknown_nmi_error(reason, regs);
|
unknown_nmi_error(reason, regs);
|
||||||
|
|
|
@ -47,4 +47,8 @@ static inline bool trigger_all_cpu_backtrace(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_NMI_WATCHDOG
|
||||||
|
int hw_nmi_is_cpu_stuck(struct pt_regs *);
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -76,6 +76,7 @@ obj-$(CONFIG_AUDIT_TREE) += audit_tree.o
|
||||||
obj-$(CONFIG_KPROBES) += kprobes.o
|
obj-$(CONFIG_KPROBES) += kprobes.o
|
||||||
obj-$(CONFIG_KGDB) += kgdb.o
|
obj-$(CONFIG_KGDB) += kgdb.o
|
||||||
obj-$(CONFIG_DETECT_SOFTLOCKUP) += softlockup.o
|
obj-$(CONFIG_DETECT_SOFTLOCKUP) += softlockup.o
|
||||||
|
obj-$(CONFIG_NMI_WATCHDOG) += nmi_watchdog.o
|
||||||
obj-$(CONFIG_DETECT_HUNG_TASK) += hung_task.o
|
obj-$(CONFIG_DETECT_HUNG_TASK) += hung_task.o
|
||||||
obj-$(CONFIG_GENERIC_HARDIRQS) += irq/
|
obj-$(CONFIG_GENERIC_HARDIRQS) += irq/
|
||||||
obj-$(CONFIG_SECCOMP) += seccomp.o
|
obj-$(CONFIG_SECCOMP) += seccomp.o
|
||||||
|
|
|
@ -170,6 +170,19 @@ config DETECT_SOFTLOCKUP
|
||||||
can be detected via the NMI-watchdog, on platforms that
|
can be detected via the NMI-watchdog, on platforms that
|
||||||
support it.)
|
support it.)
|
||||||
|
|
||||||
|
config NMI_WATCHDOG
|
||||||
|
bool "Detect Hard Lockups with an NMI Watchdog"
|
||||||
|
depends on DEBUG_KERNEL && PERF_EVENTS
|
||||||
|
default y
|
||||||
|
help
|
||||||
|
Say Y here to enable the kernel to use the NMI as a watchdog
|
||||||
|
to detect hard lockups. This is useful when a cpu hangs for no
|
||||||
|
reason but can still respond to NMIs. A backtrace is displayed
|
||||||
|
for reviewing and reporting.
|
||||||
|
|
||||||
|
The overhead should be minimal, just an extra NMI every few
|
||||||
|
seconds.
|
||||||
|
|
||||||
config BOOTPARAM_SOFTLOCKUP_PANIC
|
config BOOTPARAM_SOFTLOCKUP_PANIC
|
||||||
bool "Panic (Reboot) On Soft Lockups"
|
bool "Panic (Reboot) On Soft Lockups"
|
||||||
depends on DETECT_SOFTLOCKUP
|
depends on DETECT_SOFTLOCKUP
|
||||||
|
|
Loading…
Add table
Reference in a new issue