aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/watchdog.c
diff options
context:
space:
mode:
authorFrederic Weisbecker <fweisbec@gmail.com>2010-05-15 17:15:20 -0400
committerFrederic Weisbecker <fweisbec@gmail.com>2010-05-15 19:57:42 -0400
commit23637d477c1f53acbb176a02c241d60a25888fae (patch)
tree6d2e9e4a9f6fa2428e0ace29cf764212b823598a /kernel/watchdog.c
parentc01d4323309a90a298fd81cf3a059ee1b12be2e9 (diff)
lockup_detector: Introduce CONFIG_HARDLOCKUP_DETECTOR
This new config is deemed to simplify even more the lockup detector dependencies and can make it easier to bring a smooth sorting between archs that support the new generic lockup detector and those that still have their own, especially for those that are in the middle of this migration. Instead of checking whether we have CONFIG_LOCKUP_DETECTOR + CONFIG_PERF_EVENTS_NMI each time an arch wants to know if it needs to build its own lockup detector, take a shortcut with this new config. It is enabled only if the hardlockup detection part of the whole lockup detector is on. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Don Zickus <dzickus@redhat.com> Cc: Cyrill Gorcunov <gorcunov@gmail.com>
Diffstat (limited to 'kernel/watchdog.c')
-rw-r--r--kernel/watchdog.c14
1 files changed, 7 insertions, 7 deletions
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);
37static DEFINE_PER_CPU(bool, softlockup_touch_sync); 37static DEFINE_PER_CPU(bool, softlockup_touch_sync);
38static DEFINE_PER_CPU(bool, hard_watchdog_warn); 38static DEFINE_PER_CPU(bool, hard_watchdog_warn);
39static DEFINE_PER_CPU(bool, soft_watchdog_warn); 39static DEFINE_PER_CPU(bool, soft_watchdog_warn);
40#ifdef CONFIG_PERF_EVENTS_NMI 40#ifdef CONFIG_HARDLOCKUP_DETECTOR
41static DEFINE_PER_CPU(unsigned long, hrtimer_interrupts); 41static DEFINE_PER_CPU(unsigned long, hrtimer_interrupts);
42static DEFINE_PER_CPU(unsigned long, hrtimer_interrupts_saved); 42static DEFINE_PER_CPU(unsigned long, hrtimer_interrupts_saved);
43static DEFINE_PER_CPU(struct perf_event *, watchdog_ev); 43static 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
55static int hardlockup_panic; 55static int hardlockup_panic;
56 56
57static int __init hardlockup_panic_setup(char *str) 57static 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 */
157static int is_hardlockup(int cpu) 157static 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
193static struct perf_event_attr wd_hw_attr = { 193static 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
241static inline void watchdog_interrupt_count(void) { return; } 241static 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 */
245static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer) 245static 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
346static int watchdog_nmi_enable(int cpu) 346static 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
394static int watchdog_nmi_enable(int cpu) { return 0; } 394static int watchdog_nmi_enable(int cpu) { return 0; }
395static void watchdog_nmi_disable(int cpu) { return; } 395static 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 */
399static int watchdog_prepare_cpu(int cpu) 399static int watchdog_prepare_cpu(int cpu)