Commit 226ca5e7 authored by Joel Fernandes (Google)'s avatar Joel Fernandes (Google) Committed by Paul E. McKenney

rcu: Identify grace period is in progress as we advance up the tree

There's no need to keep checking the same starting node for whether a
grace period is in progress as we advance up the funnel lock loop. Its
sufficient if we just checked it in the start, and then subsequently
checked the internal nodes as we advanced up the combining tree. This
also makes sense because the grace-period updates propogate from the
root to the leaf, so there's a chance we may find a grace period has
started as we advance up, lets check for the same.
Reported-by: default avatarPaul McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: default avatarJoel Fernandes (Google) <joel@joelfernandes.org>
Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
parent df2bf8f7
...@@ -1598,11 +1598,12 @@ static bool rcu_start_this_gp(struct rcu_node *rnp_start, struct rcu_data *rdp, ...@@ -1598,11 +1598,12 @@ static bool rcu_start_this_gp(struct rcu_node *rnp_start, struct rcu_data *rdp,
goto unlock_out; goto unlock_out;
} }
rnp->gp_seq_needed = gp_seq_req; rnp->gp_seq_needed = gp_seq_req;
if (rcu_seq_state(rcu_seq_current(&rnp_start->gp_seq))) { if (rcu_seq_state(rcu_seq_current(&rnp->gp_seq))) {
/* /*
* We just marked the leaf, and a grace period * We just marked the leaf or internal node, and a
* is in progress, which means that rcu_gp_cleanup() * grace period is in progress, which means that
* will see the marking. Bail to reduce contention. * rcu_gp_cleanup() will see the marking. Bail to
* reduce contention.
*/ */
trace_rcu_this_gp(rnp_start, rdp, gp_seq_req, trace_rcu_this_gp(rnp_start, rdp, gp_seq_req,
TPS("Startedleaf")); TPS("Startedleaf"));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment