diff options
Diffstat (limited to 'kernel/watchdog.c')
-rw-r--r-- | kernel/watchdog.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/kernel/watchdog.c b/kernel/watchdog.c index d117262deba..14bc092fb12 100644 --- a/kernel/watchdog.c +++ b/kernel/watchdog.c | |||
@@ -3,12 +3,9 @@ | |||
3 | * | 3 | * |
4 | * started by Don Zickus, Copyright (C) 2010 Red Hat, Inc. | 4 | * started by Don Zickus, Copyright (C) 2010 Red Hat, Inc. |
5 | * | 5 | * |
6 | * this code detects hard lockups: incidents in where on a CPU | 6 | * Note: Most of this code is borrowed heavily from the original softlockup |
7 | * the kernel does not respond to anything except NMI. | 7 | * detector, so thanks to Ingo for the initial implementation. |
8 | * | 8 | * Some chunks also taken from the old x86-specific nmi watchdog code, thanks |
9 | * Note: Most of this code is borrowed heavily from softlockup.c, | ||
10 | * so thanks to Ingo for the initial implementation. | ||
11 | * Some chunks also taken from arch/x86/kernel/apic/nmi.c, thanks | ||
12 | * to those contributors as well. | 9 | * to those contributors as well. |
13 | */ | 10 | */ |
14 | 11 | ||
@@ -117,9 +114,10 @@ static unsigned long get_sample_period(void) | |||
117 | { | 114 | { |
118 | /* | 115 | /* |
119 | * convert watchdog_thresh from seconds to ns | 116 | * convert watchdog_thresh from seconds to ns |
120 | * the divide by 5 is to give hrtimer 5 chances to | 117 | * the divide by 5 is to give hrtimer several chances (two |
121 | * increment before the hardlockup detector generates | 118 | * or three with the current relation between the soft |
122 | * a warning | 119 | * and hard thresholds) to increment before the |
120 | * hardlockup detector generates a warning | ||
123 | */ | 121 | */ |
124 | return get_softlockup_thresh() * (NSEC_PER_SEC / 5); | 122 | return get_softlockup_thresh() * (NSEC_PER_SEC / 5); |
125 | } | 123 | } |
@@ -336,9 +334,11 @@ static int watchdog(void *unused) | |||
336 | 334 | ||
337 | set_current_state(TASK_INTERRUPTIBLE); | 335 | set_current_state(TASK_INTERRUPTIBLE); |
338 | /* | 336 | /* |
339 | * Run briefly once per second to reset the softlockup timestamp. | 337 | * Run briefly (kicked by the hrtimer callback function) once every |
340 | * If this gets delayed for more than 60 seconds then the | 338 | * get_sample_period() seconds (4 seconds by default) to reset the |
341 | * debug-printout triggers in watchdog_timer_fn(). | 339 | * softlockup timestamp. If this gets delayed for more than |
340 | * 2*watchdog_thresh seconds then the debug-printout triggers in | ||
341 | * watchdog_timer_fn(). | ||
342 | */ | 342 | */ |
343 | while (!kthread_should_stop()) { | 343 | while (!kthread_should_stop()) { |
344 | __touch_watchdog(); | 344 | __touch_watchdog(); |