Hello! This series reduces memory footprint (RCU callbacks posted by no-CBs CPUs) by causing the no-CBs CPUs to use the existing ->cblist segmented callback list. This allows these callbacks to take advantage of RCU grace periods that were started by something other than the corresponding rcuog kthread: 1. Use separate flag to indicate disabled ->cblist. 2. Use separate flag to indicate offloaded ->cblist. 3. Add checks for offloaded callback processing. 4. Make rcutree_migrate_callbacks() start at leaf rcu_node structure. 5. Check for deferred nocb wakeups before nohz_full early exit. 6. Remove deferred wakeup checks for extended quiescent states. 7. Allow lockless use of rcu_segcblist_restempty(). 8. Allow lockless use of rcu_segcblist_empty(). 9. Leave ->cblist enabled for no-CBs CPUs. 10. Use rcu_segcblist for no-CBs CPUs. 11. Remove obsolete nocb_head and nocb_tail fields. 12. Remove obsolete nocb_q_count and nocb_q_count_lazy fields. 13. Remove obsolete nocb_cb_tail and nocb_cb_head fields. 14. Remove obsolete nocb_gp_head and nocb_gp_tail fields. 15. Use build-time no-CBs check in rcu_do_batch(). 16. Use build-time no-CBs check in rcu_core(). 17. Use build-time no-CBs check in rcu_pending(). 18. Suppress uninitialized false-positive in nocb_gp_wait(). Thanx, Paul ------------------------------------------------------------------------ include/linux/rcu_segcblist.h | 2 include/trace/events/rcu.h | 1 kernel/rcu/rcu_segcblist.c | 64 +++- kernel/rcu/rcu_segcblist.h | 16 - kernel/rcu/tree.c | 188 +++++++------ kernel/rcu/tree.h | 29 -- kernel/rcu/tree_plugin.h | 588 ++++++++++++++---------------------------- 7 files changed, 374 insertions(+), 514 deletions(-)