On Sat, 15 Dec 2018 00:17:38 +0900 Tetsuo Handa <penguin-ker...@i-love.sakura.ne.jp> 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?