On Sun, May 02, 2021 at 09:34:30PM -0700, Michel Lespinasse wrote: > On Sun, May 02, 2021 at 08:40:49PM -0700, Paul E. McKenney wrote: > > @@ -634,6 +644,12 @@ do { \ > > * sections, invocation of the corresponding RCU callback is deferred > > * until after the all the other CPUs exit their critical sections. > > * > > + * In recent kernels, synchronize_rcu() and call_rcu() also wait for > > + * regions of code with preemption disabled, including regions of code > > + * with interrupts or softirqs disabled. If your kernel is old enough > > + * for synchronize_sched() to be defined, only code enclosed within > > + * rcu_read_lock() and rcu_read_unlock() are guaranteed to be waited for. > > + * > > * Note, however, that RCU callbacks are permitted to run concurrently > > * with new RCU read-side critical sections. One way that this can happen > > * is via the following sequence of events: (1) CPU 0 enters an RCU > > You still have "old enough" / "recent kernels" here. But maybe it's OK > given that you added relevant version numbers elsewhere. > > Everything else looks great to me. Good point! Like this? Thanx, Paul ------------------------------------------------------------------------ commit fd8393a2a8a5ffd25d0766abb262137c36bda9f3 Author: Paul E. McKenney <paulmck@xxxxxxxxxx> Date: Mon May 3 09:32:14 2021 -0700 fixup! rcu: Improve comments describing RCU read-side critical sections Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxx> diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 901ab6fa252b..323954363389 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h @@ -644,11 +644,11 @@ do { \ * sections, invocation of the corresponding RCU callback is deferred * until after the all the other CPUs exit their critical sections. * - * In recent kernels, synchronize_rcu() and call_rcu() also wait for - * regions of code with preemption disabled, including regions of code - * with interrupts or softirqs disabled. If your kernel is old enough - * for synchronize_sched() to be defined, only code enclosed within - * rcu_read_lock() and rcu_read_unlock() are guaranteed to be waited for. + * In v5.0 and later kernels, synchronize_rcu() and call_rcu() also + * wait for regions of code with preemption disabled, including regions of + * code with interrupts or softirqs disabled. In pre-v5.0 kernels, which + * define synchronize_sched(), only code enclosed within rcu_read_lock() + * and rcu_read_unlock() are guaranteed to be waited for. * * Note, however, that RCU callbacks are permitted to run concurrently * with new RCU read-side critical sections. One way that this can happen