aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sched.c2
-rw-r--r--kernel/softlockup.c15
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}
51EXPORT_SYMBOL(touch_softlockup_watchdog); 51EXPORT_SYMBOL(touch_softlockup_watchdog);
52 52
53void 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}
61EXPORT_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