On Tue, May 22, 2018 at 11:38:15PM -0700, Joel Fernandes wrote: > From: "Joel Fernandes (Google)" <j...@joelfernandes.org> > > 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: Paul McKenney <paul...@linux.vnet.ibm.com> > Signed-off-by: Joel Fernandes (Google) <j...@joelfernandes.org>
Looks good, queued for further review and testing, thank you! Thanx, Paul > --- > kernel/rcu/tree.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > > diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c > index 31f4b4b7d824..65e49282429c 100644 > --- a/kernel/rcu/tree.c > +++ b/kernel/rcu/tree.c > @@ -1570,11 +1570,12 @@ static bool rcu_start_this_gp(struct rcu_node > *rnp_start, struct rcu_data *rdp, > goto unlock_out; > } > 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 > - * is in progress, which means that rcu_gp_cleanup() > - * will see the marking. Bail to reduce contention. > + * We just marked the leaf or internal node, and a > + * grace period is in progress, which means that > + * rcu_gp_cleanup() will see the marking. Bail to > + * reduce contention. > */ > trace_rcu_this_gp(rnp_start, rdp, gp_seq_req, > TPS("Startedleaf")); > -- > 2.17.0.441.gb46fe60e1d-goog >