rcu: Fix rcu_barrier() documentation
There was a time when rcu_barrier() was guaranteed to wait for at least a grace period, but that time ended due to energy-efficiency concerns. So now rcu_barrier() is a no-op if there are no RCU callbacks queued in the system. This commit updates the documentation to reflect this change. Now, rcu_barrier() often does wait for a grace period, so, one could imagine some modification to rcu_barrier() to more efficiently handle cases where both rcu_barrier() and a grace period are needed. But this must wait until someone shows a real-world need for a change. Reported-by: Bob Copeland <bob@cozybit.com> Reported-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Reviewed-by: Josh Triplett <josh@joshtriplett.org>
This commit is contained in:
parent
f7f7bac9cb
commit
d84297c99b
@ -70,10 +70,14 @@ in realtime kernels in order to avoid excessive scheduling latencies.
|
|||||||
|
|
||||||
rcu_barrier()
|
rcu_barrier()
|
||||||
|
|
||||||
We instead need the rcu_barrier() primitive. This primitive is similar
|
We instead need the rcu_barrier() primitive. Rather than waiting for
|
||||||
to synchronize_rcu(), but instead of waiting solely for a grace
|
a grace period to elapse, rcu_barrier() waits for all outstanding RCU
|
||||||
period to elapse, it also waits for all outstanding RCU callbacks to
|
callbacks to complete. Please note that rcu_barrier() does -not- imply
|
||||||
complete. Pseudo-code using rcu_barrier() is as follows:
|
synchronize_rcu(), in particular, if there are no RCU callbacks queued
|
||||||
|
anywhere, rcu_barrier() is within its rights to return immediately,
|
||||||
|
without waiting for a grace period to elapse.
|
||||||
|
|
||||||
|
Pseudo-code using rcu_barrier() is as follows:
|
||||||
|
|
||||||
1. Prevent any new RCU callbacks from being posted.
|
1. Prevent any new RCU callbacks from being posted.
|
||||||
2. Execute rcu_barrier().
|
2. Execute rcu_barrier().
|
||||||
|
Loading…
Reference in New Issue
Block a user