diff options
| -rw-r--r-- | arch/x86/include/asm/irq.h | 4 | ||||
| -rw-r--r-- | arch/x86/include/asm/nmi.h | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/apic/hw_nmi.c | 10 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/perfctr-watchdog.c | 2 | ||||
| -rw-r--r-- | arch/x86/oprofile/op_model_p4.c | 2 | ||||
| -rw-r--r-- | drivers/watchdog/hpwdt.c | 4 | ||||
| -rw-r--r-- | include/linux/nmi.h | 6 | ||||
| -rw-r--r-- | lib/Kconfig.debug | 3 |
8 files changed, 8 insertions, 25 deletions
diff --git a/arch/x86/include/asm/irq.h b/arch/x86/include/asm/irq.h index 13b0ebaa512f..ba870bb6dd8e 100644 --- a/arch/x86/include/asm/irq.h +++ b/arch/x86/include/asm/irq.h | |||
| @@ -15,10 +15,6 @@ static inline int irq_canonicalize(int irq) | |||
| 15 | return ((irq == 2) ? 9 : irq); | 15 | return ((irq == 2) ? 9 : irq); |
| 16 | } | 16 | } |
| 17 | 17 | ||
| 18 | #ifdef CONFIG_X86_LOCAL_APIC | ||
| 19 | # define ARCH_HAS_NMI_WATCHDOG | ||
| 20 | #endif | ||
| 21 | |||
| 22 | #ifdef CONFIG_X86_32 | 18 | #ifdef CONFIG_X86_32 |
| 23 | extern void irq_ctx_init(int cpu); | 19 | extern void irq_ctx_init(int cpu); |
| 24 | #else | 20 | #else |
diff --git a/arch/x86/include/asm/nmi.h b/arch/x86/include/asm/nmi.h index 3545838cddeb..c4021b953510 100644 --- a/arch/x86/include/asm/nmi.h +++ b/arch/x86/include/asm/nmi.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | #include <asm/irq.h> | 5 | #include <asm/irq.h> |
| 6 | #include <asm/io.h> | 6 | #include <asm/io.h> |
| 7 | 7 | ||
| 8 | #ifdef ARCH_HAS_NMI_WATCHDOG | 8 | #ifdef CONFIG_X86_LOCAL_APIC |
| 9 | 9 | ||
| 10 | extern void die_nmi(char *str, struct pt_regs *regs, int do_panic); | 10 | extern void die_nmi(char *str, struct pt_regs *regs, int do_panic); |
| 11 | extern int avail_to_resrv_perfctr_nmi_bit(unsigned int); | 11 | extern int avail_to_resrv_perfctr_nmi_bit(unsigned int); |
diff --git a/arch/x86/kernel/apic/hw_nmi.c b/arch/x86/kernel/apic/hw_nmi.c index 93da91df5b38..c57d0b599448 100644 --- a/arch/x86/kernel/apic/hw_nmi.c +++ b/arch/x86/kernel/apic/hw_nmi.c | |||
| @@ -17,7 +17,6 @@ | |||
| 17 | #include <linux/nmi.h> | 17 | #include <linux/nmi.h> |
| 18 | #include <linux/module.h> | 18 | #include <linux/module.h> |
| 19 | 19 | ||
| 20 | #ifdef ARCH_HAS_NMI_WATCHDOG | ||
| 21 | #ifdef CONFIG_HARDLOCKUP_DETECTOR | 20 | #ifdef CONFIG_HARDLOCKUP_DETECTOR |
| 22 | u64 hw_nmi_get_sample_period(void) | 21 | u64 hw_nmi_get_sample_period(void) |
| 23 | { | 22 | { |
| @@ -25,15 +24,6 @@ u64 hw_nmi_get_sample_period(void) | |||
| 25 | } | 24 | } |
| 26 | #endif | 25 | #endif |
| 27 | 26 | ||
| 28 | #ifndef CONFIG_HARDLOCKUP_DETECTOR | ||
| 29 | void touch_nmi_watchdog(void) | ||
| 30 | { | ||
| 31 | touch_softlockup_watchdog(); | ||
| 32 | } | ||
| 33 | EXPORT_SYMBOL(touch_nmi_watchdog); | ||
| 34 | #endif | ||
| 35 | #endif | ||
| 36 | |||
| 37 | #ifdef arch_trigger_all_cpu_backtrace | 27 | #ifdef arch_trigger_all_cpu_backtrace |
| 38 | /* For reliability, we're prepared to waste bits here. */ | 28 | /* For reliability, we're prepared to waste bits here. */ |
| 39 | static DECLARE_BITMAP(backtrace_mask, NR_CPUS) __read_mostly; | 29 | static DECLARE_BITMAP(backtrace_mask, NR_CPUS) __read_mostly; |
diff --git a/arch/x86/kernel/cpu/perfctr-watchdog.c b/arch/x86/kernel/cpu/perfctr-watchdog.c index 14d45928c282..d5a236615501 100644 --- a/arch/x86/kernel/cpu/perfctr-watchdog.c +++ b/arch/x86/kernel/cpu/perfctr-watchdog.c | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | #include <linux/kernel.h> | 16 | #include <linux/kernel.h> |
| 17 | #include <linux/bitops.h> | 17 | #include <linux/bitops.h> |
| 18 | #include <linux/smp.h> | 18 | #include <linux/smp.h> |
| 19 | #include <linux/nmi.h> | 19 | #include <asm/nmi.h> |
| 20 | #include <linux/kprobes.h> | 20 | #include <linux/kprobes.h> |
| 21 | 21 | ||
| 22 | #include <asm/apic.h> | 22 | #include <asm/apic.h> |
diff --git a/arch/x86/oprofile/op_model_p4.c b/arch/x86/oprofile/op_model_p4.c index 182558dd5515..9fadec074142 100644 --- a/arch/x86/oprofile/op_model_p4.c +++ b/arch/x86/oprofile/op_model_p4.c | |||
| @@ -11,7 +11,7 @@ | |||
| 11 | #include <linux/oprofile.h> | 11 | #include <linux/oprofile.h> |
| 12 | #include <linux/smp.h> | 12 | #include <linux/smp.h> |
| 13 | #include <linux/ptrace.h> | 13 | #include <linux/ptrace.h> |
| 14 | #include <linux/nmi.h> | 14 | #include <asm/nmi.h> |
| 15 | #include <asm/msr.h> | 15 | #include <asm/msr.h> |
| 16 | #include <asm/fixmap.h> | 16 | #include <asm/fixmap.h> |
| 17 | #include <asm/apic.h> | 17 | #include <asm/apic.h> |
diff --git a/drivers/watchdog/hpwdt.c b/drivers/watchdog/hpwdt.c index c19f4a20794a..dea7b5bf6e2c 100644 --- a/drivers/watchdog/hpwdt.c +++ b/drivers/watchdog/hpwdt.c | |||
| @@ -642,7 +642,7 @@ static struct notifier_block die_notifier = { | |||
| 642 | */ | 642 | */ |
| 643 | 643 | ||
| 644 | #ifdef CONFIG_HPWDT_NMI_DECODING | 644 | #ifdef CONFIG_HPWDT_NMI_DECODING |
| 645 | #ifdef ARCH_HAS_NMI_WATCHDOG | 645 | #ifdef CONFIG_X86_LOCAL_APIC |
| 646 | static void __devinit hpwdt_check_nmi_decoding(struct pci_dev *dev) | 646 | static void __devinit hpwdt_check_nmi_decoding(struct pci_dev *dev) |
| 647 | { | 647 | { |
| 648 | /* | 648 | /* |
| @@ -657,7 +657,7 @@ static void __devinit hpwdt_check_nmi_decoding(struct pci_dev *dev) | |||
| 657 | dev_warn(&dev->dev, "NMI decoding is disabled. " | 657 | dev_warn(&dev->dev, "NMI decoding is disabled. " |
| 658 | "Your kernel does not support a NMI Watchdog.\n"); | 658 | "Your kernel does not support a NMI Watchdog.\n"); |
| 659 | } | 659 | } |
| 660 | #endif /* ARCH_HAS_NMI_WATCHDOG */ | 660 | #endif /* CONFIG_X86_LOCAL_APIC */ |
| 661 | 661 | ||
| 662 | static int __devinit hpwdt_init_nmi_decoding(struct pci_dev *dev) | 662 | static int __devinit hpwdt_init_nmi_decoding(struct pci_dev *dev) |
| 663 | { | 663 | { |
diff --git a/include/linux/nmi.h b/include/linux/nmi.h index 17ccf44e7dcb..c536f8545f74 100644 --- a/include/linux/nmi.h +++ b/include/linux/nmi.h | |||
| @@ -14,18 +14,14 @@ | |||
| 14 | * may be used to reset the timeout - for code which intentionally | 14 | * may be used to reset the timeout - for code which intentionally |
| 15 | * disables interrupts for a long time. This call is stateless. | 15 | * disables interrupts for a long time. This call is stateless. |
| 16 | */ | 16 | */ |
| 17 | #ifdef ARCH_HAS_NMI_WATCHDOG | 17 | #if defined(ARCH_HAS_NMI_WATCHDOG) || defined(CONFIG_HARDLOCKUP_DETECTOR) |
| 18 | #include <asm/nmi.h> | 18 | #include <asm/nmi.h> |
| 19 | extern void touch_nmi_watchdog(void); | 19 | extern void touch_nmi_watchdog(void); |
| 20 | #else | 20 | #else |
| 21 | #ifndef CONFIG_HARDLOCKUP_DETECTOR | ||
| 22 | static inline void touch_nmi_watchdog(void) | 21 | static inline void touch_nmi_watchdog(void) |
| 23 | { | 22 | { |
| 24 | touch_softlockup_watchdog(); | 23 | touch_softlockup_watchdog(); |
| 25 | } | 24 | } |
| 26 | #else | ||
| 27 | extern void touch_nmi_watchdog(void); | ||
| 28 | #endif | ||
| 29 | #endif | 25 | #endif |
| 30 | 26 | ||
| 31 | /* | 27 | /* |
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 28b42b9274d0..2d05adb98401 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug | |||
| @@ -173,7 +173,8 @@ config LOCKUP_DETECTOR | |||
| 173 | An NMI is generated every 60 seconds or so to check for hardlockups. | 173 | An NMI is generated every 60 seconds or so to check for hardlockups. |
| 174 | 174 | ||
| 175 | config HARDLOCKUP_DETECTOR | 175 | config HARDLOCKUP_DETECTOR |
| 176 | def_bool LOCKUP_DETECTOR && PERF_EVENTS && HAVE_PERF_EVENTS_NMI | 176 | def_bool LOCKUP_DETECTOR && PERF_EVENTS && HAVE_PERF_EVENTS_NMI && \ |
| 177 | !ARCH_HAS_NMI_WATCHDOG | ||
| 177 | 178 | ||
| 178 | config BOOTPARAM_SOFTLOCKUP_PANIC | 179 | config BOOTPARAM_SOFTLOCKUP_PANIC |
| 179 | bool "Panic (Reboot) On Soft Lockups" | 180 | bool "Panic (Reboot) On Soft Lockups" |
