Re: [PATCH] kernel/hung_task.c: Break RCU locks based on jiffies.

From: Andrew Morton
Date: Fri Dec 14 2018 - 15:31:16 EST


On Sat, 15 Dec 2018 00:17:38 +0900 Tetsuo Handa <penguin-kernel@xxxxxxxxxxxxxxxxxxx> wrote:

> check_hung_uninterruptible_tasks() is currently calling rcu_lock_break()
> for every 1024 threads. But check_hung_task() is very slow if printk()
> was called, and is very fast otherwise. If many threads within some 1024
> threads called printk(), the RCU grace period might be extended enough
> to trigger RCU stall warnings. Therefore, calling rcu_lock_break() for
> every some fixed jiffies will be safer.
>
> --- a/kernel/hung_task.c
> +++ b/kernel/hung_task.c
> @@ -34,7 +34,7 @@
> * is disabled during the critical section. It also controls the size of
> * the RCU grace period. So it needs to be upper-bound.
> */
> -#define HUNG_TASK_BATCHING 1024
> +#define HUNG_TASK_LOCK_BREAK (HZ / 10)

This won't work correctly if rcu_cpu_stall_timeout is set to something
stupidly small. Perhaps is would be better to make this code aware of
the current rcu_cpu_stall_timeout setting?