diff options
author | Paul E. McKenney <paul.mckenney@linaro.org> | 2012-05-29 17:56:46 -0400 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2012-07-02 15:33:23 -0400 |
commit | cf3a9c4842b1e097dbe0854933c471d43dd24f69 (patch) | |
tree | 5b2737cade79c491ba46cd642c01cc165118d723 /kernel/rcutree.h | |
parent | cfed0a85dad921c683e9c0d25b072bcc5745ede0 (diff) |
rcu: Increase rcu_barrier() concurrency
The traditional rcu_barrier() implementation has serialized all requests,
regardless of RCU flavor, and also does not coalesce concurrent requests.
In the past, this has been good and sufficient.
However, systems are getting larger and use of rcu_barrier() has been
increasing. This commit therefore introduces a counter-based scheme
that allows _rcu_barrier() calls for the same flavor of RCU to take
advantage of each others' work.
Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcutree.h')
-rw-r--r-- | kernel/rcutree.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/kernel/rcutree.h b/kernel/rcutree.h index 7641aec3e59c..be10286ad380 100644 --- a/kernel/rcutree.h +++ b/kernel/rcutree.h | |||
@@ -403,6 +403,8 @@ struct rcu_state { | |||
403 | struct mutex barrier_mutex; /* Guards barrier fields. */ | 403 | struct mutex barrier_mutex; /* Guards barrier fields. */ |
404 | atomic_t barrier_cpu_count; /* # CPUs waiting on. */ | 404 | atomic_t barrier_cpu_count; /* # CPUs waiting on. */ |
405 | struct completion barrier_completion; /* Wake at barrier end. */ | 405 | struct completion barrier_completion; /* Wake at barrier end. */ |
406 | unsigned long n_barrier_done; /* ++ at start and end of */ | ||
407 | /* _rcu_barrier(). */ | ||
406 | raw_spinlock_t fqslock; /* Only one task forcing */ | 408 | raw_spinlock_t fqslock; /* Only one task forcing */ |
407 | /* quiescent states. */ | 409 | /* quiescent states. */ |
408 | unsigned long jiffies_force_qs; /* Time at which to invoke */ | 410 | unsigned long jiffies_force_qs; /* Time at which to invoke */ |