rcu: More aggressively enlist scheduler aid for nohz_full CPUs
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Wed, 25 Jul 2018 18:49:47 +0000 (11:49 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 30 Aug 2018 23:03:44 +0000 (16:03 -0700)
commitd3052109c0bc9e536d17d627ae628ed8ceb6928c
tree95d7a83a78bf0d3f1ba62975d7258d1d547038e9
parentc06aed0e31008a248c1841f1b7fc80e9ee242a31
rcu: More aggressively enlist scheduler aid for nohz_full CPUs

Because nohz_full CPUs can leave the scheduler-clock interrupt disabled
even when in kernel mode, RCU cannot rely on rcu_check_callbacks() to
enlist the scheduler's aid in extracting a quiescent state from such CPUs.
This commit therefore more aggressively uses resched_cpu() on nohz_full
CPUs that fail to pass through a quiescent state in a timely manner.
By default, the resched_cpu() beating starts 300 milliseconds into the
quiescent state.

While in the neighborhood, add a ->last_fqs_resched field to the rcu_data
structure in order to rate-limit resched_cpu() calls from the RCU
grace-period kthread.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
kernel/rcu/tree.c
kernel/rcu/tree.h
kernel/rcu/tree_plugin.h