On Sat, Oct 10, 2026 at 08:45:52PM -0400, Joel Fernandes wrote: > Atomic SRCU (srcu_read_lock_atomic(), srcu_read_unlock_atomic(), > synchronize_srcu_atomic(), init_srcu_struct_atomic(), and friends) > added readers that do not sleep or block, plus an update side that spins > rather than sleeping. > > These are missing from Requirements.rst. Add them. > > Signed-off-by: Joel Fernandes <[email protected]>
Acked-by: Paul E. McKenney <[email protected]> > --- > .../RCU/Design/Requirements/Requirements.rst | 28 +++++++++++++++---- > 1 file changed, 23 insertions(+), 5 deletions(-) > > diff --git a/Documentation/RCU/Design/Requirements/Requirements.rst > b/Documentation/RCU/Design/Requirements/Requirements.rst > index 8101fe6229d5..d43668595872 100644 > --- a/Documentation/RCU/Design/Requirements/Requirements.rst > +++ b/Documentation/RCU/Design/Requirements/Requirements.rst > @@ -2686,11 +2686,13 @@ The `SRCU API > <https://lwn.net/Articles/609973/#RCU%20Per-Flavor%20API%20Table>`__ > includes srcu_read_lock(), srcu_read_unlock(), > srcu_dereference(), srcu_dereference_check(), synchronize_srcu(), > -synchronize_srcu_expedited(), call_srcu(), srcu_barrier(), > -and srcu_read_lock_held(). It also includes DEFINE_SRCU(), > -DEFINE_STATIC_SRCU(), DEFINE_SRCU_FAST(), DEFINE_STATIC_SRCU_FAST(), > -init_srcu_struct(), and init_srcu_struct_fast() APIs for defining and > -initializing ``srcu_struct`` structures. > +synchronize_srcu_expedited(), synchronize_srcu_atomic(), call_srcu(), > +srcu_barrier(), and srcu_read_lock_held(). It also includes > +DEFINE_SRCU(), DEFINE_STATIC_SRCU(), DEFINE_SRCU_FAST(), > +DEFINE_STATIC_SRCU_FAST(), DEFINE_SRCU_ATOMIC(), > +DEFINE_STATIC_SRCU_ATOMIC(), init_srcu_struct(), > +init_srcu_struct_fast(), and init_srcu_struct_atomic() APIs for > +defining and initializing ``srcu_struct`` structures. > > More recently, the SRCU API has added polling interfaces: > > @@ -2710,6 +2712,22 @@ certain types of buffer-cache algorithms having > multi-stage age-out > mechanisms. The idea is that by the time the block has aged completely > from the cache, an SRCU grace period will be very likely to have elapsed. > > +A more recent addition to the SRCU API is the atomic flavor: > +srcu_read_lock_atomic(), srcu_read_unlock_atomic(), and > +synchronize_srcu_atomic(). An atomic-SRCU reader runs with preemption > +disabled, must invoke srcu_read_lock_atomic() and > +srcu_read_unlock_atomic() on the same CPU from the same context, and > +must never sleep nor block on anything that might itself depend on > +memory allocation, which allows synchronize_srcu_atomic() to spin > +rather than sleep while waiting for pre-existing readers. This > +requires that all other SRCU usage be excluded from a given atomic > +``srcu_struct`` structure: every reader must use > +srcu_read_lock_atomic() and srcu_read_unlock_atomic() rather than > +srcu_read_lock() or any other SRCU reader flavor, and the structure > +must not be passed to call_srcu(), synchronize_srcu(), > +synchronize_srcu_expedited(), start_poll_synchronize_srcu(), > +srcu_barrier(), or srcu_expedite_current(). > + > Tasks RCU > ~~~~~~~~~ > > -- > 2.54.0 >

