[PATCH rcu 0/16 Lazy call_rcu() updates for v6.2

From: Paul E. McKenney
Date: Mon Nov 21 2022 - 20:04:16 EST


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. percpu-refcount: Use call_rcu_flush() for atomic switch, courtesy
of "Joel Fernandes (Google)".

9. Use call_rcu_flush() instead of call_rcu, courtesy of "Joel
Fernandes (Google)".

10. Use call_rcu_flush() for async reader test, courtesy of "Joel
Fernandes (Google)".

11. Use call_rcu_flush() where needed, courtesy of "Joel Fernandes
(Google)".

12. scsi/scsi_error: Use call_rcu_flush() instead of call_rcu(),
courtesy of Uladzislau Rezki.

13. Make queue_rcu_work() use call_rcu_flush(), courtesy of Uladzislau
Rezki.

14. Use call_rcu_flush() instead of call_rcu(), courtesy of "Joel
Fernandes (Google)".

15. Use call_rcu_flush() for dst_release(), courtesy of "Joel
Fernandes (Google)".

16. devinet: Reduce refcount before grace period, courtesy of Eric
Dumazet.

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(-)