diff options
author | Paul E. McKenney <paul.mckenney@linaro.org> | 2012-12-30 01:04:18 -0500 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2013-03-26 11:04:55 -0400 |
commit | b8462084a2a88a6a0489f9bb7d8b1bb95bc455ab (patch) | |
tree | c784b3be6b83d2f55cac528c6c877504c27078df /kernel/rcutree_plugin.h | |
parent | bd9f0686fc8c9a01c6850b1c611d1c9ad80b86d6 (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.h | 5 |
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. */ |