diff options
| -rw-r--r-- | arch/Kconfig | 4 | ||||
| -rw-r--r-- | init/Kconfig | 7 | ||||
| -rw-r--r-- | kernel/watchdog.c | 14 | ||||
| -rw-r--r-- | lib/Kconfig.debug | 3 |
4 files changed, 14 insertions, 14 deletions
diff --git a/arch/Kconfig b/arch/Kconfig index 89b0efb50948..35084f280087 100644 --- a/arch/Kconfig +++ b/arch/Kconfig | |||
| @@ -147,5 +147,9 @@ config HAVE_USER_RETURN_NOTIFIER | |||
| 147 | 147 | ||
| 148 | config HAVE_PERF_EVENTS_NMI | 148 | config HAVE_PERF_EVENTS_NMI |
| 149 | bool | 149 | bool |
| 150 | help | ||
| 151 | System hardware can generate an NMI using the perf event | ||
| 152 | subsystem. Also has support for calculating CPU cycle events | ||
| 153 | to determine how many clock cycles in a given period. | ||
| 150 | 154 | ||
| 151 | source "kernel/gcov/Kconfig" | 155 | source "kernel/gcov/Kconfig" |
diff --git a/init/Kconfig b/init/Kconfig index ab733c32292c..eb77e8ccde1c 100644 --- a/init/Kconfig +++ b/init/Kconfig | |||
| @@ -942,13 +942,6 @@ config PERF_USE_VMALLOC | |||
| 942 | help | 942 | help |
| 943 | See tools/perf/design.txt for details | 943 | See tools/perf/design.txt for details |
| 944 | 944 | ||
| 945 | config PERF_EVENTS_NMI | ||
| 946 | def_bool PERF_EVENTS && HAVE_PERF_EVENTS_NMI | ||
| 947 | help | ||
| 948 | System hardware can generate an NMI using the perf event | ||
| 949 | subsystem. Also has support for calculating CPU cycle events | ||
| 950 | to determine how many clock cycles in a given period. | ||
| 951 | |||
| 952 | menu "Kernel Performance Events And Counters" | 945 | menu "Kernel Performance Events And Counters" |
| 953 | 946 | ||
| 954 | config PERF_EVENTS | 947 | config PERF_EVENTS |
diff --git a/kernel/watchdog.c b/kernel/watchdog.c index be5e74e62be6..83fb63155cbc 100644 --- a/kernel/watchdog.c +++ b/kernel/watchdog.c | |||
| @@ -37,7 +37,7 @@ static DEFINE_PER_CPU(struct hrtimer, watchdog_hrtimer); | |||
| 37 | static DEFINE_PER_CPU(bool, softlockup_touch_sync); | 37 | static DEFINE_PER_CPU(bool, softlockup_touch_sync); |
| 38 | static DEFINE_PER_CPU(bool, hard_watchdog_warn); | 38 | static DEFINE_PER_CPU(bool, hard_watchdog_warn); |
| 39 | static DEFINE_PER_CPU(bool, soft_watchdog_warn); | 39 | static DEFINE_PER_CPU(bool, soft_watchdog_warn); |
| 40 | #ifdef CONFIG_PERF_EVENTS_NMI | 40 | #ifdef CONFIG_HARDLOCKUP_DETECTOR |
| 41 | static DEFINE_PER_CPU(unsigned long, hrtimer_interrupts); | 41 | static DEFINE_PER_CPU(unsigned long, hrtimer_interrupts); |
| 42 | static DEFINE_PER_CPU(unsigned long, hrtimer_interrupts_saved); | 42 | static DEFINE_PER_CPU(unsigned long, hrtimer_interrupts_saved); |
| 43 | static DEFINE_PER_CPU(struct perf_event *, watchdog_ev); | 43 | static DEFINE_PER_CPU(struct perf_event *, watchdog_ev); |
| @@ -51,7 +51,7 @@ static int __initdata no_watchdog; | |||
| 51 | /* | 51 | /* |
| 52 | * Should we panic when a soft-lockup or hard-lockup occurs: | 52 | * Should we panic when a soft-lockup or hard-lockup occurs: |
| 53 | */ | 53 | */ |
| 54 | #ifdef CONFIG_PERF_EVENTS_NMI | 54 | #ifdef CONFIG_HARDLOCKUP_DETECTOR |
| 55 | static int hardlockup_panic; | 55 | static int hardlockup_panic; |
| 56 | 56 | ||
| 57 | static int __init hardlockup_panic_setup(char *str) | 57 | static int __init hardlockup_panic_setup(char *str) |
| @@ -152,7 +152,7 @@ void touch_softlockup_watchdog_sync(void) | |||
| 152 | __raw_get_cpu_var(watchdog_touch_ts) = 0; | 152 | __raw_get_cpu_var(watchdog_touch_ts) = 0; |
| 153 | } | 153 | } |
| 154 | 154 | ||
| 155 | #ifdef CONFIG_PERF_EVENTS_NMI | 155 | #ifdef CONFIG_HARDLOCKUP_DETECTOR |
| 156 | /* watchdog detector functions */ | 156 | /* watchdog detector functions */ |
| 157 | static int is_hardlockup(int cpu) | 157 | static int is_hardlockup(int cpu) |
| 158 | { | 158 | { |
| @@ -189,7 +189,7 @@ static struct notifier_block panic_block = { | |||
| 189 | .notifier_call = watchdog_panic, | 189 | .notifier_call = watchdog_panic, |
| 190 | }; | 190 | }; |
| 191 | 191 | ||
| 192 | #ifdef CONFIG_PERF_EVENTS_NMI | 192 | #ifdef CONFIG_HARDLOCKUP_DETECTOR |
| 193 | static struct perf_event_attr wd_hw_attr = { | 193 | static struct perf_event_attr wd_hw_attr = { |
| 194 | .type = PERF_TYPE_HARDWARE, | 194 | .type = PERF_TYPE_HARDWARE, |
| 195 | .config = PERF_COUNT_HW_CPU_CYCLES, | 195 | .config = PERF_COUNT_HW_CPU_CYCLES, |
| @@ -239,7 +239,7 @@ static void watchdog_interrupt_count(void) | |||
| 239 | } | 239 | } |
| 240 | #else | 240 | #else |
| 241 | static inline void watchdog_interrupt_count(void) { return; } | 241 | static inline void watchdog_interrupt_count(void) { return; } |
| 242 | #endif /* CONFIG_PERF_EVENTS_NMI */ | 242 | #endif /* CONFIG_HARDLOCKUP_DETECTOR */ |
| 243 | 243 | ||
| 244 | /* watchdog kicker functions */ | 244 | /* watchdog kicker functions */ |
| 245 | static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer) | 245 | static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer) |
| @@ -342,7 +342,7 @@ static int watchdog(void *__bind_cpu) | |||
| 342 | } | 342 | } |
| 343 | 343 | ||
| 344 | 344 | ||
| 345 | #ifdef CONFIG_PERF_EVENTS_NMI | 345 | #ifdef CONFIG_HARDLOCKUP_DETECTOR |
| 346 | static int watchdog_nmi_enable(int cpu) | 346 | static int watchdog_nmi_enable(int cpu) |
| 347 | { | 347 | { |
| 348 | struct perf_event_attr *wd_attr; | 348 | struct perf_event_attr *wd_attr; |
| @@ -393,7 +393,7 @@ static void watchdog_nmi_disable(int cpu) | |||
| 393 | #else | 393 | #else |
| 394 | static int watchdog_nmi_enable(int cpu) { return 0; } | 394 | static int watchdog_nmi_enable(int cpu) { return 0; } |
| 395 | static void watchdog_nmi_disable(int cpu) { return; } | 395 | static void watchdog_nmi_disable(int cpu) { return; } |
| 396 | #endif /* CONFIG_PERF_EVENTS_NMI */ | 396 | #endif /* CONFIG_HARDLOCKUP_DETECTOR */ |
| 397 | 397 | ||
| 398 | /* prepare/enable/disable routines */ | 398 | /* prepare/enable/disable routines */ |
| 399 | static int watchdog_prepare_cpu(int cpu) | 399 | static int watchdog_prepare_cpu(int cpu) |
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 3a18b0b856ce..e65e47d5c5e6 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug | |||
| @@ -174,6 +174,9 @@ config LOCKUP_DETECTOR | |||
| 174 | generate interrupts and kick the watchdog task every 10-12 seconds. | 174 | generate interrupts and kick the watchdog task every 10-12 seconds. |
| 175 | An NMI is generated every 60 seconds or so to check for hardlockups. | 175 | An NMI is generated every 60 seconds or so to check for hardlockups. |
| 176 | 176 | ||
| 177 | config HARDLOCKUP_DETECTOR | ||
| 178 | def_bool LOCKUP_DETECTOR && PERF_EVENTS && HAVE_PERF_EVENTS_NMI | ||
| 179 | |||
| 177 | config BOOTPARAM_SOFTLOCKUP_PANIC | 180 | config BOOTPARAM_SOFTLOCKUP_PANIC |
| 178 | bool "Panic (Reboot) On Soft Lockups" | 181 | bool "Panic (Reboot) On Soft Lockups" |
| 179 | depends on LOCKUP_DETECTOR | 182 | depends on LOCKUP_DETECTOR |
