Hello! This series is a sneak preview of additional work for the move of no-CBs CPUs to the ->cblist segmented RCU callback list. This work adds a ->nocb_bypass list with its own lock to further reduce contention. This series also includes some nascent work to turn the scheduling-clock interrupt back on for nohz_full CPUs doing heavy rcutorture work or RCU callback invocation, both of which can remain in the kernel for long time periods, which in turn can impede CPU hotplug removals. (On some systems "impede" means up to seven minutes for stop-machine to actually get things to stop, a problem that has not yet been observed on no-CBs CPUs that are not also nohz_full CPUs.) 1. Atomic ->len field in rcu_segcblist structure. 2. Add bypass callback queueing in ->nocb_bypass with its own ->nocb_bypass_lock. 3. (Experimental) Check use and usefulness of ->nocb_lock_contended. 4. Print no-CBs diagnostics when rcutorture writer unduly delayed. 5. Avoid synchronous wakeup in __call_rcu_nocb_wake(). 6. Advance CBs after merge in rcutree_migrate_callbacks() to avoid unnecessary invocation delays. 7. Reduce nocb_cb_wait() leaf rcu_node ->lock contention. 8. Reduce __call_rcu_nocb_wake() leaf rcu_node ->lock contention. 9. Don't wake no-CBs GP kthread if timer posted under overload, thus reducing overhead in the overload case. 10. Allow rcu_do_batch() to dynamically adjust batch sizes, courtesy of Eric Dumazet. 11. (Experimental) Add TICK_DEP_BIT_RCU, courtesy of Frederic Weisbecker. 12. Force on tick when invoking lots of callbacks to reduce the probability of long stop-machine delays. 13. Force on tick for readers and callback flooders, again to reduce the probability of long stop-machine delays. 14. (Experimental and likely quite imperfect) Make multi_cpu_stop() enable tick on all online CPUs, yet again to reduce the probability of long stop-machine delays. Thanx, Paul ------------------------------------------------------------------------ include/linux/rcu_segcblist.h | 4 include/linux/tick.h | 7 kernel/rcu/rcu_segcblist.c | 116 +++++++++- kernel/rcu/rcu_segcblist.h | 17 + kernel/rcu/rcutorture.c | 25 +- kernel/rcu/tree.c | 41 +++ kernel/rcu/tree.h | 35 ++- kernel/rcu/tree_plugin.h | 486 +++++++++++++++++++++++++++++++++++++----- kernel/rcu/tree_stall.h | 5 kernel/stop_machine.c | 9 kernel/time/tick-sched.c | 2 11 files changed, 667 insertions(+), 80 deletions(-)