diff options
Diffstat (limited to 'kernel/softlockup.c')
-rw-r--r-- | kernel/softlockup.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/kernel/softlockup.c b/kernel/softlockup.c index 5ea631742dbc..8fa7040247ad 100644 --- a/kernel/softlockup.c +++ b/kernel/softlockup.c | |||
@@ -50,6 +50,16 @@ void touch_softlockup_watchdog(void) | |||
50 | } | 50 | } |
51 | EXPORT_SYMBOL(touch_softlockup_watchdog); | 51 | EXPORT_SYMBOL(touch_softlockup_watchdog); |
52 | 52 | ||
53 | void touch_all_softlockup_watchdogs(void) | ||
54 | { | ||
55 | int cpu; | ||
56 | |||
57 | /* Cause each CPU to re-update its timestamp rather than complain */ | ||
58 | for_each_online_cpu(cpu) | ||
59 | per_cpu(touch_timestamp, cpu) = 0; | ||
60 | } | ||
61 | EXPORT_SYMBOL(touch_all_softlockup_watchdogs); | ||
62 | |||
53 | /* | 63 | /* |
54 | * This callback runs from the timer interrupt, and checks | 64 | * This callback runs from the timer interrupt, and checks |
55 | * whether the watchdog thread has hung or not: | 65 | * whether the watchdog thread has hung or not: |
@@ -61,9 +71,10 @@ void softlockup_tick(void) | |||
61 | unsigned long print_timestamp; | 71 | unsigned long print_timestamp; |
62 | unsigned long now; | 72 | unsigned long now; |
63 | 73 | ||
64 | /* watchdog task hasn't updated timestamp yet */ | 74 | if (touch_timestamp == 0) { |
65 | if (touch_timestamp == 0) | 75 | touch_softlockup_watchdog(); |
66 | return; | 76 | return; |
77 | } | ||
67 | 78 | ||
68 | print_timestamp = per_cpu(print_timestamp, this_cpu); | 79 | print_timestamp = per_cpu(print_timestamp, this_cpu); |
69 | 80 | ||