}
EXPORT_SYMBOL(touch_softlockup_watchdog);
+void touch_all_softlockup_watchdogs(void)
+{
+ int cpu;
+
+ /* Cause each CPU to re-update its timestamp rather than complain */
+ for_each_online_cpu(cpu)
+ per_cpu(touch_timestamp, cpu) = 0;
+}
+EXPORT_SYMBOL(touch_all_softlockup_watchdogs);
+
/*
* This callback runs from the timer interrupt, and checks
* whether the watchdog thread has hung or not:
unsigned long print_timestamp;
unsigned long now;
- /* watchdog task hasn't updated timestamp yet */
- if (touch_timestamp == 0)
+ if (touch_timestamp == 0) {
+ touch_softlockup_watchdog();
return;
+ }
print_timestamp = per_cpu(print_timestamp, this_cpu);