From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Boqun Feng <boqun.feng@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
linux-kernel@vger.kernel.org, mingo@kernel.org,
jiangshanlai@gmail.com, dipankar@in.ibm.com,
akpm@linux-foundation.org, mathieu.desnoyers@efficios.com,
josh@joshtriplett.org, tglx@linutronix.de, rostedt@goodmis.org,
dhowells@redhat.com, edumazet@google.com, fweisbec@gmail.com,
oleg@redhat.com, joel@joelfernandes.org
Subject: Re: [PATCH tip/core/rcu 2/2] rcu: Make expedited GPs handle CPU 0 being offline
Date: Wed, 27 Jun 2018 09:15:31 -0700 [thread overview]
Message-ID: <20180627161531.GB3593@linux.vnet.ibm.com> (raw)
In-Reply-To: <20180627024201.GA27704@tardis>
On Wed, Jun 27, 2018 at 10:42:01AM +0800, Boqun Feng wrote:
> On Tue, Jun 26, 2018 at 12:27:47PM -0700, Paul E. McKenney wrote:
> > On Tue, Jun 26, 2018 at 07:46:52PM +0800, Boqun Feng wrote:
> > > On Tue, Jun 26, 2018 at 06:44:47PM +0800, Boqun Feng wrote:
> > > > On Tue, Jun 26, 2018 at 11:38:20AM +0200, Peter Zijlstra wrote:
> > > > > On Mon, Jun 25, 2018 at 03:43:32PM -0700, Paul E. McKenney wrote:
> > > > > > + preempt_disable();
> > > > > > + for_each_leaf_node_possible_cpu(rnp, cpu) {
> > > > > > + if (cpu_is_offline(cpu)) /* Preemption disabled. */
> > > > > > + continue;
> > > > >
> > > > > Create for_each_node_online_cpu() instead? Seems a bit pointless to
> > > > > iterate possible mask only to then check it against the online mask.
> > > > > Just iterate the online mask directly.
> > > > >
> > > > > Or better yet, write this as:
> > > > >
> > > > > preempt_disable();
> > > > > cpu = cpumask_next(rnp->grplo - 1, cpu_online_mask);
> > > > > if (cpu > rnp->grphi)
> > > > > cpu = WORK_CPU_UNBOUND;
> > > > > queue_work_on(cpu, rcu_par_gp_wq, &rnp->rew.rew_work);
> > > > > preempt_enable();
> > > > >
> > > > > Which is what it appears to be doing.
> > > > >
> > > >
> > > > Make sense! Thanks ;-)
> > > >
> > > > Applied this and running a TREE03 rcutorture. If all go well, I will
> > > > send the updated patch.
> > > >
> > >
> > > So the patch has passed one 30 min run for TREE03 rcutorture. Paul,
> > > if it looks good, could you take it for your next spin or pull request
> > > in the future? Thanks.
> >
> > I ended up with the following, mostly just rewording the comment and
> > adding a one-liner on the change. Does this work for you?
>
> Looks good to me. Only one thing I think we need to modify a little,
> please see below:
>
> > Thanx, Paul
> >
> > ------------------------------------------------------------------------
> >
> > commit ef31fa78032536d594630d7bd315d3faf60d98ca
> > Author: Boqun Feng <boqun.feng@gmail.com>
> > Date: Fri Jun 15 12:06:31 2018 -0700
> >
> > rcu: Make expedited GPs handle CPU 0 being offline
> >
> > Currently, the parallelized initialization of expedited grace periods uses
> > the workqueue associated with each rcu_node structure's ->grplo field.
> > This works fine unless that CPU is offline. This commit therefore
> > uses the CPU corresponding to the lowest-numbered online CPU, or just
> > reports the quiescent states if there are no online CPUs on this rcu_node
> > structure.
>
> better write "or just queue the work on WORK_CPU_UNBOUND if there are
> no online CPUs on this rcu_node structure"? Because we currently don't
> report the QS directly if all CPU are offline.
>
> Thoughts?
Any objections? If I don't hear any by tomorrow morning (Pacific Time),
I will make this change.
Thanx, Paul
> Regards,
> Boqun
>
> >
> > Note that this patch uses cpu_is_offline() instead of the usual
> > approach of checking bits in the rcu_node structure's ->qsmaskinitnext
> > field. This is safe because preemption is disabled across both the
> > cpu_is_offline() check and the call to queue_work_on().
> >
> > Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> > [ paulmck: Disable preemption to close offline race window. ]
> > Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> > [ paulmck: Apply Peter Zijlstra feedback on CPU selection. ]
> >
> > diff --git a/kernel/rcu/tree_exp.h b/kernel/rcu/tree_exp.h
> > index c6385ee1af65..b3df3b770afb 100644
> > --- a/kernel/rcu/tree_exp.h
> > +++ b/kernel/rcu/tree_exp.h
> > @@ -472,6 +472,7 @@ static void sync_rcu_exp_select_node_cpus(struct work_struct *wp)
> > static void sync_rcu_exp_select_cpus(struct rcu_state *rsp,
> > smp_call_func_t func)
> > {
> > + int cpu;
> > struct rcu_node *rnp;
> >
> > trace_rcu_exp_grace_period(rsp->name, rcu_exp_gp_seq_endval(rsp), TPS("reset"));
> > @@ -493,7 +494,13 @@ static void sync_rcu_exp_select_cpus(struct rcu_state *rsp,
> > continue;
> > }
> > INIT_WORK(&rnp->rew.rew_work, sync_rcu_exp_select_node_cpus);
> > - queue_work_on(rnp->grplo, rcu_par_gp_wq, &rnp->rew.rew_work);
> > + preempt_disable();
> > + cpu = cpumask_next(rnp->grplo - 1, cpu_online_mask);
> > + /* If all offline, queue the work on an unbound CPU. */
> > + if (unlikely(cpu > rnp->grphi))
> > + cpu = WORK_CPU_UNBOUND;
> > + queue_work_on(cpu, rcu_par_gp_wq, &rnp->rew.rew_work);
> > + preempt_enable();
> > rnp->exp_need_flush = true;
> > }
> >
> >
next prev parent reply other threads:[~2018-06-27 16:13 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-25 22:43 [PATCH tip/core/rcu 0/2] Expedited grace-period changes for v4.19 Paul E. McKenney
2018-06-25 22:43 ` [PATCH tip/core/rcu 1/2] rcu: Make expedited grace period use direct call on last leaf Paul E. McKenney
2018-06-25 22:43 ` [PATCH tip/core/rcu 2/2] rcu: Make expedited GPs handle CPU 0 being offline Paul E. McKenney
2018-06-26 9:38 ` Peter Zijlstra
2018-06-26 10:44 ` Boqun Feng
2018-06-26 11:46 ` Boqun Feng
2018-06-26 12:31 ` Paul E. McKenney
2018-06-26 19:27 ` Paul E. McKenney
2018-06-27 2:42 ` Boqun Feng
2018-06-27 16:15 ` Paul E. McKenney [this message]
2018-06-28 16:52 ` Paul E. McKenney
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180627161531.GB3593@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=boqun.feng@gmail.com \
--cc=dhowells@redhat.com \
--cc=dipankar@in.ibm.com \
--cc=edumazet@google.com \
--cc=fweisbec@gmail.com \
--cc=jiangshanlai@gmail.com \
--cc=joel@joelfernandes.org \
--cc=josh@joshtriplett.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mingo@kernel.org \
--cc=oleg@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.