diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2018-04-10 21:17:56 -0700 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2018-05-15 10:29:07 -0700 |
commit | 9036c2ffd596261d2067fc2d693dc4f0d7a51214 (patch) | |
tree | d17b25e148a4d22f6e309617bbdbf5cde5dc45aa /sound/core | |
parent | 60cc43fc888428bb2f18f08997432d426a243338 (diff) | |
download | linux-9036c2ffd596261d2067fc2d693dc4f0d7a51214.tar.bz2 |
rcu: Improve non-root rcu_cbs_completed() accuracy
When rcu_cbs_completed() is invoked on a non-root rcu_node structure,
it unconditionally assumes that two grace periods must complete before
the callbacks at hand can be invoked. This is overly conservative because
if that non-root rcu_node structure believes that no grace period is in
progress, and if the corresponding rcu_state structure's ->gpnum field
has not yet been incremented, then these callbacks may safely be invoked
after only one grace period has completed.
This change is required to permit grace-period start requests to use
funnel locking, which is in turn permitted to reduce root rcu_node ->lock
contention, which has been observed by Nick Piggin. Furthermore, such
contention will likely be increased by the merging of RCU-bh, RCU-preempt,
and RCU-sched, so it makes sense to take steps to decrease it.
This commit therefore improves the accuracy of rcu_cbs_completed() when
invoked on a non-root rcu_node structure as described above.
Reported-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Tested-by: Nicholas Piggin <npiggin@gmail.com>
Diffstat (limited to 'sound/core')
0 files changed, 0 insertions, 0 deletions