aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcupdate.c
diff options
context:
space:
mode:
authorOleg Nesterov <oleg@tv-sign.ru>2006-01-08 14:19:33 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-01-09 20:01:39 -0500
commitdbc1651f0c5b7d13acc59d3b805a7224332fb1fb (patch)
tree1e380afb42aa091d2acce50cd2cc10e368d1026a /kernel/rcupdate.c
parent1fd5a46dd6bbca3a1275465120caf4748872c2a7 (diff)
[PATCH] rcu: don't set ->next_pending in rcu_start_batch()
I think it is better to set ->next_pending in the caller, when it is needed. This saves one parameter, and this coincides with cpu_quiet() beahaviour, which sets ->completed = ->cur itself. Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru> Acked-by: Paul E. McKenney <paulmck@us.ibm.com> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel/rcupdate.c')
-rw-r--r--kernel/rcupdate.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/kernel/rcupdate.c b/kernel/rcupdate.c
index ccc45d49ce71..05ee48316f70 100644
--- a/kernel/rcupdate.c
+++ b/kernel/rcupdate.c
@@ -236,12 +236,8 @@ static void rcu_do_batch(struct rcu_data *rdp)
236 * active batch and the batch to be registered has not already occurred. 236 * active batch and the batch to be registered has not already occurred.
237 * Caller must hold rcu_state.lock. 237 * Caller must hold rcu_state.lock.
238 */ 238 */
239static void rcu_start_batch(struct rcu_ctrlblk *rcp, struct rcu_state *rsp, 239static void rcu_start_batch(struct rcu_ctrlblk *rcp, struct rcu_state *rsp)
240 int next_pending)
241{ 240{
242 if (next_pending)
243 rcp->next_pending = 1;
244
245 if (rcp->next_pending && 241 if (rcp->next_pending &&
246 rcp->completed == rcp->cur) { 242 rcp->completed == rcp->cur) {
247 rcp->next_pending = 0; 243 rcp->next_pending = 0;
@@ -275,7 +271,7 @@ static void cpu_quiet(int cpu, struct rcu_ctrlblk *rcp, struct rcu_state *rsp)
275 if (cpus_empty(rsp->cpumask)) { 271 if (cpus_empty(rsp->cpumask)) {
276 /* batch completed ! */ 272 /* batch completed ! */
277 rcp->completed = rcp->cur; 273 rcp->completed = rcp->cur;
278 rcu_start_batch(rcp, rsp, 0); 274 rcu_start_batch(rcp, rsp);
279 } 275 }
280} 276}
281 277
@@ -410,7 +406,8 @@ static void __rcu_process_callbacks(struct rcu_ctrlblk *rcp,
410 if (!rcp->next_pending) { 406 if (!rcp->next_pending) {
411 /* and start it/schedule start if it's a new batch */ 407 /* and start it/schedule start if it's a new batch */
412 spin_lock(&rsp->lock); 408 spin_lock(&rsp->lock);
413 rcu_start_batch(rcp, rsp, 1); 409 rcp->next_pending = 1;
410 rcu_start_batch(rcp, rsp);
414 spin_unlock(&rsp->lock); 411 spin_unlock(&rsp->lock);
415 } 412 }
416 } else { 413 } else {