@@ -2637,15 +2637,16 @@ synchronize_srcu() for some other domain ``ss1``, and if an
26372637that was held across as ``ss ``-domain synchronize_srcu(), deadlock
26382638would again be possible. Such a deadlock cycle could extend across an
26392639arbitrarily large number of different SRCU domains. Again, with great
2640- power comes great responsibility.
2640+ power comes great responsibility, though lockdep is now able to detect
2641+ this sort of deadlock.
26412642
2642- Unlike the other RCU flavors, SRCU read-side critical sections can run
2643- on idle and even offline CPUs. This ability requires that
2644- srcu_read_lock() and srcu_read_unlock() contain memory barriers,
2645- which means that SRCU readers will run a bit slower than would RCU
2646- readers. It also motivates the smp_mb__after_srcu_read_unlock() API,
2647- which, in combination with srcu_read_unlock(), guarantees a full
2648- memory barrier.
2643+ Unlike the other RCU flavors, SRCU read-side critical sections can run on
2644+ idle and even offline CPUs, with the exception of srcu_read_lock_fast()
2645+ and friends. This ability requires that srcu_read_lock() and
2646+ srcu_read_unlock() contain memory barriers, which means that SRCU
2647+ readers will run a bit slower than would RCU readers . It also motivates
2648+ the smp_mb__after_srcu_read_unlock() API, which, in combination with
2649+ srcu_read_unlock(), guarantees a full memory barrier.
26492650
26502651Also unlike other RCU flavors, synchronize_srcu() may **not ** be
26512652invoked from CPU-hotplug notifiers, due to the fact that SRCU grace
@@ -2681,15 +2682,15 @@ run some tests first. SRCU just might need a few adjustment to deal with
26812682that sort of load. Of course, your mileage may vary based on the speed
26822683of your CPUs and the size of your memory.
26832684
2684- The `SRCU
2685- API <https://lwn.net/Articles/609973/#RCU%20Per-Flavor%20API%20Table> `__
2685+ The `SRCU API
2686+ <https://lwn.net/Articles/609973/#RCU%20Per-Flavor%20API%20Table> `__
26862687includes srcu_read_lock(), srcu_read_unlock(),
2687- srcu_dereference(), srcu_dereference_check(),
2688- synchronize_srcu (), synchronize_srcu_expedited (),
2689- call_srcu(), srcu_barrier(), and srcu_read_lock_held(). It
2690- also includes DEFINE_SRCU (), DEFINE_STATIC_SRCU (), and
2691- init_srcu_struct() APIs for defining and initializing
2692- ``srcu_struct `` structures.
2688+ srcu_dereference(), srcu_dereference_check(), synchronize_srcu(),
2689+ synchronize_srcu_expedited (), call_srcu(), srcu_barrier (),
2690+ and srcu_read_lock_held(). It also includes DEFINE_SRCU(),
2691+ DEFINE_STATIC_SRCU (), DEFINE_SRCU_FAST (), DEFINE_STATIC_SRCU_FAST(),
2692+ init_srcu_struct(), and init_srcu_struct_fast() APIs for defining and
2693+ initializing ``srcu_struct `` structures.
26932694
26942695More recently, the SRCU API has added polling interfaces:
26952696
0 commit comments