|
@@ -216,26 +216,27 @@ static int watchdog(void *__bind_cpu)
|
|
|
/* initialize timestamp */
|
|
|
touch_softlockup_watchdog();
|
|
|
|
|
|
+ set_current_state(TASK_INTERRUPTIBLE);
|
|
|
/*
|
|
|
* Run briefly once per second to reset the softlockup timestamp.
|
|
|
* If this gets delayed for more than 60 seconds then the
|
|
|
* debug-printout triggers in softlockup_tick().
|
|
|
*/
|
|
|
while (!kthread_should_stop()) {
|
|
|
- set_current_state(TASK_INTERRUPTIBLE);
|
|
|
touch_softlockup_watchdog();
|
|
|
schedule();
|
|
|
|
|
|
if (kthread_should_stop())
|
|
|
break;
|
|
|
|
|
|
- if (this_cpu != check_cpu)
|
|
|
- continue;
|
|
|
-
|
|
|
- if (sysctl_hung_task_timeout_secs)
|
|
|
- check_hung_uninterruptible_tasks(this_cpu);
|
|
|
+ if (this_cpu == check_cpu) {
|
|
|
+ if (sysctl_hung_task_timeout_secs)
|
|
|
+ check_hung_uninterruptible_tasks(this_cpu);
|
|
|
+ }
|
|
|
|
|
|
+ set_current_state(TASK_INTERRUPTIBLE);
|
|
|
}
|
|
|
+ __set_current_state(TASK_RUNNING);
|
|
|
|
|
|
return 0;
|
|
|
}
|