Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 84e478c6 authored by Don Zickus's avatar Don Zickus Committed by Ingo Molnar
Browse files

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: default avatarDon 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: default avatarIngo Molnar <mingo@elte.hu>
parent 1fb9d6ad
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -2,7 +2,12 @@
# 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_SMP)		+= ipi.o

+2 −0
Original line number Diff line number Diff line
@@ -406,6 +406,7 @@ static notrace __kprobes void default_do_nmi(struct pt_regs *regs)
	        			                == NOTIFY_STOP)
	                return;

#ifndef CONFIG_NMI_WATCHDOG
		/*
		 * Ok, so this is none of the documented NMI sources,
		 * 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))
			return;
		if (!do_nmi_callback(regs, cpu))
#endif /* !CONFIG_NMI_WATCHDOG */
			unknown_nmi_error(reason, regs);
#else
		unknown_nmi_error(reason, regs);
+4 −0
Original line number Diff line number Diff line
@@ -47,4 +47,8 @@ static inline bool trigger_all_cpu_backtrace(void)
}
#endif

#ifdef CONFIG_NMI_WATCHDOG
int hw_nmi_is_cpu_stuck(struct pt_regs *);
#endif

#endif
+1 −0
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ obj-$(CONFIG_AUDIT_TREE) += audit_tree.o
obj-$(CONFIG_KPROBES) += kprobes.o
obj-$(CONFIG_KGDB) += kgdb.o
obj-$(CONFIG_DETECT_SOFTLOCKUP) += softlockup.o
obj-$(CONFIG_NMI_WATCHDOG) += nmi_watchdog.o
obj-$(CONFIG_DETECT_HUNG_TASK) += hung_task.o
obj-$(CONFIG_GENERIC_HARDIRQS) += irq/
obj-$(CONFIG_SECCOMP) += seccomp.o
+13 −0
Original line number Diff line number Diff line
@@ -170,6 +170,19 @@ config DETECT_SOFTLOCKUP
	   can be detected via the NMI-watchdog, on platforms that
	   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
	bool "Panic (Reboot) On Soft Lockups"
	depends on DETECT_SOFTLOCKUP