diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/sched.c | 2 | ||||
-rw-r--r-- | kernel/softlockup.c | 15 |
2 files changed, 15 insertions, 2 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 0227f1625a75..5530ed211f72 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -4750,6 +4750,8 @@ void show_state_filter(unsigned long state_filter) | |||
4750 | show_task(p); | 4750 | show_task(p); |
4751 | } while_each_thread(g, p); | 4751 | } while_each_thread(g, p); |
4752 | 4752 | ||
4753 | touch_all_softlockup_watchdogs(); | ||
4754 | |||
4753 | read_unlock(&tasklist_lock); | 4755 | read_unlock(&tasklist_lock); |
4754 | /* | 4756 | /* |
4755 | * Only show locks if all tasks are dumped: | 4757 | * Only show locks if all tasks are dumped: |
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 | ||