aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/softlockup.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/softlockup.c')
-rw-r--r--kernel/softlockup.c15
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}
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