Hello! This series provides energy efficiency for nearly-idle systems by making call_rcu() more lazy. Several NOCB changes come along for the ride: 1. Simplify rcu_init_nohz() cpumask handling, courtesy of Zhen Lei. 2. Fix late wakeup when flush of bypass cblist happens, courtesy of "Joel Fernandes (Google)". 3. Fix missing nocb gp wake on rcu_barrier(), courtesy of Frederic Weisbecker. 4. Make call_rcu() lazy to save power, courtesy of "Joel Fernandes (Google)". 5. Refactor code a bit in rcu_nocb_do_flush_bypass(), courtesy of "Joel Fernandes (Google)". 6. Shrinker for lazy rcu, courtesy of Vineeth Pillai. 7. Add laziness and kfree tests, courtesy of "Joel Fernandes (Google)". 8. Use call_rcu_hurry() instead of call_rcu, courtesy of "Joel Fernandes (Google)". 9. Use call_rcu_hurry() for async reader test, courtesy of "Joel Fernandes (Google)". 10. Use call_rcu_hurry() where needed, courtesy of "Joel Fernandes (Google)". 11. scsi/scsi_error: Use call_rcu_hurry() instead of call_rcu(), courtesy of Uladzislau Rezki. 12. percpu-refcount: Use call_rcu_hurry() for atomic switch, courtesy of "Joel Fernandes (Google)". 13. Make queue_rcu_work() use call_rcu_hurry(), courtesy of Uladzislau Rezki. 14. Use call_rcu_hurry() instead of call_rcu(), courtesy of "Joel Fernandes (Google)". 15. Use call_rcu_hurry() for dst_release(), courtesy of "Joel Fernandes (Google)". 16. devinet: Reduce refcount before grace period, courtesy of Eric Dumazet. Changes since v2: o Rename call_rcu_flush() to call_rcu_hurry() to avoid naming conflicts in workqueues as suggested by Tejun Heo. o Apply acks and reviews. https://lore.kernel.org/all/20221122010408.GA3799268@paulmck-ThinkPad-P17-Gen-1/ Changes since v1: o Add more adjustments to avoid excessive laziness (#15 and #16 above). o Get appropriate Cc lines onto non-RCU patches. https://lore.kernel.org/all/20221019225138.GA2499943@paulmck-ThinkPad-P17-Gen-1/ Thanx, Paul ------------------------------------------------------------------------ b/drivers/scsi/scsi_error.c | 2 b/include/linux/rcupdate.h | 9 + b/kernel/rcu/Kconfig | 8 + b/kernel/rcu/rcu.h | 8 + b/kernel/rcu/rcuscale.c | 67 +++++++++++- b/kernel/rcu/rcutorture.c | 16 +- b/kernel/rcu/sync.c | 2 b/kernel/rcu/tiny.c | 2 b/kernel/rcu/tree.c | 11 + b/kernel/rcu/tree.h | 1 b/kernel/rcu/tree_exp.h | 2 b/kernel/rcu/tree_nocb.h | 34 +----- b/kernel/workqueue.c | 2 b/lib/percpu-refcount.c | 3 b/net/core/dst.c | 2 b/net/ipv4/devinet.c | 19 +-- b/net/rxrpc/conn_object.c | 2 kernel/rcu/rcuscale.c | 2 kernel/rcu/tree.c | 129 +++++++++++++++-------- kernel/rcu/tree.h | 11 + kernel/rcu/tree_nocb.h | 243 ++++++++++++++++++++++++++++++++++++-------- 21 files changed, 434 insertions(+), 141 deletions(-)