[PATCH v2 0/21] Add atomic SRCU &c for v7.4

From: Paul E. McKenney

Date: Wed Oct 07 2026 - 16:59:57 EST


Hello!

This series adds an atomic SRCU and some additional adjustments:

1. Make a Tiny SRCU grace period imply an RCU grace period.

2. Suppress srcu_advance_state() mutex_lock in atomic.

3. Suppress to-big transition for atomic SRCU.

4. Add an atomic Tree SRCU.

5. Add an atomic Tiny SRCU.

6. Add support for testing synchronize_srcu_atomic().

7. Disable preemption across synchronize_srcu_atomic().

8. Use IRQ_WORK_INIT_HARD for srcu's irq_work, courtesy of Sebastian
Andrzej Siewior.

9. Warn if Tiny SRCU readers are preempted.

10. Explicitly note DEFINE_SRCU() needs for srcu_barrier().

11. Add atomic-SRCU support to torture.sh, courtesy of Kunwu Chan.

12. Add reader-free fastpath to synchronize_srcu_atomic(), courtesy
of Kunwu Chan.

13. Skip callback scheduling for atomic SRCU grace periods, courtesy
of Kunwu Chan.

14. Remove srcu_barrier() sleep for atomic SRCU, courtesy of Kunwu
Chan.

15. Restrict atomic-SRCU non_block annotation to task context,
courtesy of Kunwu Chan.

16. Make init_srcu_struct_atomic() prevent transition to big,
courtesy of Kunwu Chan.

17. Don't transition atomic SRCU to big in srcu_gp_end(), courtesy
of Kunwu Chan.

18. Skip torture to-big transition for atomic SRCU, courtesy of
Kunwu Chan.

19. Add lockdep and early-boot checks to synchronize_srcu_atomic(),
courtesy of Kunwu Chan.

20. Add lockdep and early-boot checks to synchronize_srcu_atomic(),
courtesy of Kunwu Chan.

21. Preserve IRQ state in synchronize_srcu_atomic() callchain,
courtesy of Kunwu Chan.

Changes since v1:
https://lore.kernel.org/all/13d6be93-8d9d-47a2-beb0-99c8a90938d4@paulmck-laptop/

o Added patches 19-21.

o Dropped old patch 9 in favor of an urgent RFC pull request.

Thanx, Paul

------------------------------------------------------------------------

b/include/linux/srcu.h | 81 ++++
b/include/linux/srcutiny.h | 6
b/include/linux/srcutree.h | 9
b/kernel/rcu/rcutorture.c | 46 ++
b/kernel/rcu/srcutiny.c | 2
b/kernel/rcu/srcutree.c | 23 -
b/tools/testing/selftests/rcutorture/bin/torture.sh | 24 +
include/linux/srcu.h | 10
include/linux/srcutree.h | 6
kernel/rcu/srcutiny.c | 94 +++++
kernel/rcu/srcutree.c | 333 ++++++++++++++++----
11 files changed, 548 insertions(+), 86 deletions(-)