aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcutree_plugin.h
diff options
context:
space:
mode:
authorPaul E. McKenney <paul.mckenney@linaro.org>2012-12-30 01:04:18 -0500
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2013-03-26 11:04:55 -0400
commitb8462084a2a88a6a0489f9bb7d8b1bb95bc455ab (patch)
treec784b3be6b83d2f55cac528c6c877504c27078df /kernel/rcutree_plugin.h
parentbd9f0686fc8c9a01c6850b1c611d1c9ad80b86d6 (diff)
rcu: Push lock release to rcu_start_gp()'s callers
If CPUs are to give prior notice of needed grace periods, it will be necessary to invoke rcu_start_gp() without dropping the root rcu_node structure's ->lock. This commit takes a second step in this direction by moving the release of this lock to rcu_start_gp()'s callers. 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_plugin.h')
-rw-r--r--kernel/rcutree_plugin.h5
1 files changed, 2 insertions, 3 deletions
diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h
index df50502eca2c..073ded26e259 100644
--- a/kernel/rcutree_plugin.h
+++ b/kernel/rcutree_plugin.h
@@ -2174,7 +2174,6 @@ static void rcu_nocb_wait_gp(struct rcu_data *rdp)
2174 unsigned long c; 2174 unsigned long c;
2175 bool d; 2175 bool d;
2176 unsigned long flags; 2176 unsigned long flags;
2177 unsigned long flags1;
2178 struct rcu_node *rnp = rdp->mynode; 2177 struct rcu_node *rnp = rdp->mynode;
2179 struct rcu_node *rnp_root = rcu_get_root(rdp->rsp); 2178 struct rcu_node *rnp_root = rcu_get_root(rdp->rsp);
2180 2179
@@ -2236,8 +2235,8 @@ static void rcu_nocb_wait_gp(struct rcu_data *rdp)
2236 c, rnp->level, 2235 c, rnp->level,
2237 rnp->grplo, rnp->grphi, 2236 rnp->grplo, rnp->grphi,
2238 "Startedroot"); 2237 "Startedroot");
2239 local_save_flags(flags1); 2238 rcu_start_gp(rdp->rsp);
2240 rcu_start_gp(rdp->rsp, flags1); /* Rlses ->lock. */ 2239 raw_spin_unlock(&rnp->lock);
2241 } 2240 }
2242 2241
2243 /* Clean up locking and irq state. */ 2242 /* Clean up locking and irq state. */