hung_task.c 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. /*
  2. * Detect Hung Task
  3. *
  4. * kernel/hung_task.c - kernel thread for detecting tasks stuck in D state
  5. *
  6. */
  7. #include <linux/mm.h>
  8. #include <linux/cpu.h>
  9. #include <linux/nmi.h>
  10. #include <linux/init.h>
  11. #include <linux/delay.h>
  12. #include <linux/freezer.h>
  13. #include <linux/kthread.h>
  14. #include <linux/lockdep.h>
  15. #include <linux/export.h>
  16. #include <linux/sysctl.h>
  17. #include <linux/utsname.h>
  18. #include <linux/sched/signal.h>
  19. #include <linux/sched/debug.h>
  20. #include <trace/events/sched.h>
  21. /*
  22. * The number of tasks checked:
  23. */
  24. int __read_mostly sysctl_hung_task_check_count = PID_MAX_LIMIT;
  25. /*
  26. * Limit number of tasks checked in a batch.
  27. *
  28. * This value controls the preemptibility of khungtaskd since preemption
  29. * is disabled during the critical section. It also controls the size of
  30. * the RCU grace period. So it needs to be upper-bound.
  31. */
  32. #define HUNG_TASK_BATCHING 1024
  33. /*
  34. * Zero means infinite timeout - no checking done:
  35. */
  36. unsigned long __read_mostly sysctl_hung_task_timeout_secs = CONFIG_DEFAULT_HUNG_TASK_TIMEOUT;
  37. int __read_mostly sysctl_hung_task_warnings = 10;
  38. static int __read_mostly did_panic;
  39. static struct task_struct *watchdog_task;
  40. /*
  41. * Should we panic (and reboot, if panic_timeout= is set) when a
  42. * hung task is detected:
  43. */
  44. unsigned int __read_mostly sysctl_hung_task_panic =
  45. CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE;
  46. static int __init hung_task_panic_setup(char *str)
  47. {
  48. int rc = kstrtouint(str, 0, &sysctl_hung_task_panic);
  49. if (rc)
  50. return rc;
  51. return 1;
  52. }
  53. __setup("hung_task_panic=", hung_task_panic_setup);
  54. static int
  55. hung_task_panic(struct notifier_block *this, unsigned long event, void *ptr)
  56. {
  57. did_panic = 1;
  58. return NOTIFY_DONE;
  59. }
  60. static struct notifier_block panic_block = {
  61. .notifier_call = hung_task_panic,
  62. };
  63. static void check_hung_task(struct task_struct *t, unsigned long timeout)
  64. {
  65. unsigned long switch_count = t->nvcsw + t->nivcsw;
  66. /*
  67. * Ensure the task is not frozen.
  68. * Also, skip vfork and any other user process that freezer should skip.
  69. */
  70. if (unlikely(t->flags & (PF_FROZEN | PF_FREEZER_SKIP)))
  71. return;
  72. /*
  73. * When a freshly created task is scheduled once, changes its state to
  74. * TASK_UNINTERRUPTIBLE without having ever been switched out once, it
  75. * musn't be checked.
  76. */
  77. if (unlikely(!switch_count))
  78. return;
  79. if (switch_count != t->last_switch_count) {
  80. t->last_switch_count = switch_count;
  81. return;
  82. }
  83. trace_sched_process_hang(t);
  84. if (!sysctl_hung_task_warnings && !sysctl_hung_task_panic)
  85. return;
  86. /*
  87. * Ok, the task did not get scheduled for more than 2 minutes,
  88. * complain:
  89. */
  90. if (sysctl_hung_task_warnings) {
  91. if (sysctl_hung_task_warnings > 0)
  92. sysctl_hung_task_warnings--;
  93. pr_err("INFO: task %s:%d blocked for more than %ld seconds.\n",
  94. t->comm, t->pid, timeout);
  95. pr_err(" %s %s %.*s\n",
  96. print_tainted(), init_utsname()->release,
  97. (int)strcspn(init_utsname()->version, " "),
  98. init_utsname()->version);
  99. pr_err("\"echo 0 > /proc/sys/kernel/hung_task_timeout_secs\""
  100. " disables this message.\n");
  101. sched_show_task(t);
  102. debug_show_all_locks();
  103. }
  104. touch_nmi_watchdog();
  105. if (sysctl_hung_task_panic) {
  106. trigger_all_cpu_backtrace();
  107. panic("hung_task: blocked tasks");
  108. }
  109. }
  110. /*
  111. * To avoid extending the RCU grace period for an unbounded amount of time,
  112. * periodically exit the critical section and enter a new one.
  113. *
  114. * For preemptible RCU it is sufficient to call rcu_read_unlock in order
  115. * to exit the grace period. For classic RCU, a reschedule is required.
  116. */
  117. static bool rcu_lock_break(struct task_struct *g, struct task_struct *t)
  118. {
  119. bool can_cont;
  120. get_task_struct(g);
  121. get_task_struct(t);
  122. rcu_read_unlock();
  123. cond_resched();
  124. rcu_read_lock();
  125. can_cont = pid_alive(g) && pid_alive(t);
  126. put_task_struct(t);
  127. put_task_struct(g);
  128. return can_cont;
  129. }
  130. /*
  131. * Check whether a TASK_UNINTERRUPTIBLE does not get woken up for
  132. * a really long time (120 seconds). If that happens, print out
  133. * a warning.
  134. */
  135. static void check_hung_uninterruptible_tasks(unsigned long timeout)
  136. {
  137. int max_count = sysctl_hung_task_check_count;
  138. int batch_count = HUNG_TASK_BATCHING;
  139. struct task_struct *g, *t;
  140. /*
  141. * If the system crashed already then all bets are off,
  142. * do not report extra hung tasks:
  143. */
  144. if (test_taint(TAINT_DIE) || did_panic)
  145. return;
  146. rcu_read_lock();
  147. for_each_process_thread(g, t) {
  148. if (!max_count--)
  149. goto unlock;
  150. if (!--batch_count) {
  151. batch_count = HUNG_TASK_BATCHING;
  152. if (!rcu_lock_break(g, t))
  153. goto unlock;
  154. }
  155. /* use "==" to skip the TASK_KILLABLE tasks waiting on NFS */
  156. if (t->state == TASK_UNINTERRUPTIBLE)
  157. check_hung_task(t, timeout);
  158. }
  159. unlock:
  160. rcu_read_unlock();
  161. }
  162. static long hung_timeout_jiffies(unsigned long last_checked,
  163. unsigned long timeout)
  164. {
  165. /* timeout of 0 will disable the watchdog */
  166. return timeout ? last_checked - jiffies + timeout * HZ :
  167. MAX_SCHEDULE_TIMEOUT;
  168. }
  169. /*
  170. * Process updating of timeout sysctl
  171. */
  172. int proc_dohung_task_timeout_secs(struct ctl_table *table, int write,
  173. void __user *buffer,
  174. size_t *lenp, loff_t *ppos)
  175. {
  176. int ret;
  177. ret = proc_doulongvec_minmax(table, write, buffer, lenp, ppos);
  178. if (ret || !write)
  179. goto out;
  180. wake_up_process(watchdog_task);
  181. out:
  182. return ret;
  183. }
  184. static atomic_t reset_hung_task = ATOMIC_INIT(0);
  185. void reset_hung_task_detector(void)
  186. {
  187. atomic_set(&reset_hung_task, 1);
  188. }
  189. EXPORT_SYMBOL_GPL(reset_hung_task_detector);
  190. /*
  191. * kthread which checks for tasks stuck in D state
  192. */
  193. static int watchdog(void *dummy)
  194. {
  195. unsigned long hung_last_checked = jiffies;
  196. set_user_nice(current, 0);
  197. for ( ; ; ) {
  198. unsigned long timeout = sysctl_hung_task_timeout_secs;
  199. long t = hung_timeout_jiffies(hung_last_checked, timeout);
  200. if (t <= 0) {
  201. if (!atomic_xchg(&reset_hung_task, 0))
  202. check_hung_uninterruptible_tasks(timeout);
  203. hung_last_checked = jiffies;
  204. continue;
  205. }
  206. schedule_timeout_interruptible(t);
  207. }
  208. return 0;
  209. }
  210. static int __init hung_task_init(void)
  211. {
  212. atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
  213. watchdog_task = kthread_run(watchdog, NULL, "khungtaskd");
  214. return 0;
  215. }
  216. subsys_initcall(hung_task_init);