From: Frederic Weisbecker <frederic@kernel.org>
To: Pingfan Liu <kernelfans@gmail.com>
Cc: rcu@vger.kernel.org, "Paul E. McKenney" <paulmck@kernel.org>,
David Woodhouse <dwmw@amazon.co.uk>,
Neeraj Upadhyay <quic_neeraju@quicinc.com>,
Josh Triplett <josh@joshtriplett.org>,
Steven Rostedt <rostedt@goodmis.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Lai Jiangshan <jiangshanlai@gmail.com>,
Joel Fernandes <joel@joelfernandes.org>,
"Jason A. Donenfeld" <Jason@zx2c4.com>
Subject: Re: [PATCHv2 2/3] rcu: Resort to cpu_dying_mask for affinity when offlining
Date: Tue, 20 Sep 2022 11:00:21 +0200 [thread overview]
Message-ID: <20220920090021.GC69891@lothringen> (raw)
In-Reply-To: <YykweX7mXEk/83Ft@piliu.users.ipa.redhat.com>
On Tue, Sep 20, 2022 at 11:16:09AM +0800, Pingfan Liu wrote:
> On Mon, Sep 19, 2022 at 12:34:32PM +0200, Frederic Weisbecker wrote:
> > On Mon, Sep 19, 2022 at 12:33:23PM +0800, Pingfan Liu wrote:
> > > On Fri, Sep 16, 2022 at 10:24 PM Frederic Weisbecker
> > > > > diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
> > > > > index ef6d3ae239b9..e5afc63bd97f 100644
> > > > > --- a/kernel/rcu/tree_plugin.h
> > > > > +++ b/kernel/rcu/tree_plugin.h
> > > > > @@ -1243,6 +1243,12 @@ static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu)
> > > > > cpu != outgoingcpu)
> > > > > cpumask_set_cpu(cpu, cm);
> > > > > cpumask_and(cm, cm, housekeeping_cpumask(HK_TYPE_RCU));
> > > > > + /*
> > > > > + * For concurrent offlining, bit of qsmaskinitnext is not cleared yet.
> > > > > + * So resort to cpu_dying_mask, whose changes has already been visible.
> > > > > + */
> > > > > + if (outgoingcpu != -1)
> > > > > + cpumask_andnot(cm, cm, cpu_dying_mask);
> > > >
> > > > I'm not sure how the infrastructure changes in your concurrent down patchset
> > > > but can the cpu_dying_mask concurrently change at this stage?
> > > >
> > >
> > > For the concurrent down patchset [1], it extends the cpu_down()
> > > capability to let an initiator to tear down several cpus in a batch
> > > and in parallel.
> > >
> > > At the first step, all cpus to be torn down should experience
> > > cpuhp_set_state(cpu, st, CPUHP_TEARDOWN_CPU), by that way, they are
> > > set in the bitmap cpu_dying_mask [2]. Then the cpu hotplug kthread on
> > > each teardown cpu can be kicked to work. (Indeed, [2] has a bug, and I
> > > need to fix it by using another loop to call
> > > cpuhp_kick_ap_work_async(cpu);)
> >
> > So if I understand correctly there is a synchronization point for all
> > CPUs between cpuhp_set_state() and CPUHP_AP_RCUTREE_ONLINE ?
> >
>
> Yes, your understanding is right.
>
> > And how about rollbacks through cpuhp_reset_state() ?
> >
>
> Originally, cpuhp_reset_state() is not considered in my fast kexec
> reboot series since at that point, all devices have been shutdown and
> have no way to back. The rebooting just adventures to move on.
>
> But yes as you point out, cpuhp_reset_state() throws a challenge to keep
> the stability of cpu_dying_mask.
>
> Considering we have the following order.
> 1.
> set_cpu_dying(true)
> rcutree_offline_cpu()
> 2. when rollback
> set_cpu_dying(false)
> rcutree_online_cpu()
>
>
> The dying mask is stable before rcu routines, and
> rnp->boost_kthread_mutex can be used to build a order to access the
> latest cpu_dying_mask as in [1/3].
Ok thanks for the clarification!
next prev parent reply other threads:[~2022-09-20 9:01 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-15 5:58 [PATCHv2 0/3] rcu: Enhance the capability to cope with concurrent cpu offlining/onlining Pingfan Liu
2022-09-15 5:58 ` [PATCHv2 1/3] rcu: Keep qsmaskinitnext fresh when rcutree_online_cpu() Pingfan Liu
2022-09-15 6:11 ` Pingfan Liu
2022-09-16 14:52 ` Frederic Weisbecker
2022-09-19 10:24 ` Pingfan Liu
2022-09-19 10:51 ` Frederic Weisbecker
2022-09-20 3:45 ` Pingfan Liu
2022-09-20 9:23 ` Frederic Weisbecker
2022-10-01 2:26 ` Joel Fernandes
2022-10-02 12:34 ` Pingfan Liu
2022-10-02 15:52 ` Joel Fernandes
2022-09-20 10:31 ` Frederic Weisbecker
2022-09-21 11:56 ` Pingfan Liu
2022-09-15 5:58 ` [PATCHv2 2/3] rcu: Resort to cpu_dying_mask for affinity when offlining Pingfan Liu
2022-09-16 14:23 ` Frederic Weisbecker
2022-09-19 4:33 ` Pingfan Liu
2022-09-19 10:34 ` Frederic Weisbecker
2022-09-20 3:16 ` Pingfan Liu
2022-09-20 9:00 ` Frederic Weisbecker [this message]
2022-09-20 9:38 ` Frederic Weisbecker
2022-09-21 11:48 ` Pingfan Liu
2022-09-15 5:58 ` [PATCHv2 3/3] rcu: coordinate tick dependency during concurrent offlining Pingfan Liu
2022-09-16 13:42 ` Frederic Weisbecker
2022-09-20 7:26 ` Pingfan Liu
2022-09-20 9:46 ` Frederic Weisbecker
2022-09-20 19:13 ` Paul E. McKenney
2022-09-22 9:29 ` Pingfan Liu
2022-09-22 13:54 ` Paul E. McKenney
2022-09-23 22:13 ` Frederic Weisbecker
2022-09-26 6:34 ` Pingfan Liu
2022-09-26 22:23 ` Paul E. McKenney
2022-09-27 9:59 ` Pingfan Liu
2022-09-29 8:19 ` Pingfan Liu
2022-09-29 8:20 ` Pingfan Liu
2022-09-30 13:04 ` Joel Fernandes
2022-10-02 14:06 ` Pingfan Liu
2022-10-02 16:11 ` Joel Fernandes
2022-10-02 16:24 ` Paul E. McKenney
2022-10-02 16:30 ` Joel Fernandes
2022-10-02 16:57 ` Paul E. McKenney
2022-10-02 16:59 ` Joel Fernandes
2022-09-30 15:44 ` Paul E. McKenney
2022-10-02 13:29 ` Pingfan Liu
2022-10-02 15:08 ` Frederic Weisbecker
2022-10-02 16:20 ` Paul E. McKenney
2022-10-02 16:20 ` Paul E. McKenney
[not found] ` <CAFgQCTtgLfc0NeYqyWk4Ew-pA9rMREjRjWSnQhYLv-V5117s9Q@mail.gmail.com>
2022-10-27 17:46 ` Paul E. McKenney
2022-10-31 3:24 ` Pingfan Liu
2022-11-03 16:51 ` Paul E. McKenney
2022-11-07 16:07 ` Paul E. McKenney
2022-11-09 18:55 ` Joel Fernandes
2022-11-18 12:08 ` Pingfan Liu
2022-11-18 23:30 ` Paul E. McKenney
2022-11-21 3:48 ` Pingfan Liu
2022-11-21 17:14 ` Paul E. McKenney
2022-11-17 14:39 ` Frederic Weisbecker
2022-11-18 1:45 ` Pingfan Liu
[not found] ` <CAFgQCTtNetv7v_Law=abPtngC8Gv6OGcGz9M_wWMxz_GAEWDUQ@mail.gmail.com>
2022-10-27 18:13 ` Paul E. McKenney
2022-10-31 2:10 ` Pingfan Liu
2022-09-26 16:13 ` Joel Fernandes
2022-09-27 9:42 ` Pingfan Liu
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=20220920090021.GC69891@lothringen \
--to=frederic@kernel.org \
--cc=Jason@zx2c4.com \
--cc=dwmw@amazon.co.uk \
--cc=jiangshanlai@gmail.com \
--cc=joel@joelfernandes.org \
--cc=josh@joshtriplett.org \
--cc=kernelfans@gmail.com \
--cc=mathieu.desnoyers@efficios.com \
--cc=paulmck@kernel.org \
--cc=quic_neeraju@quicinc.com \
--cc=rcu@vger.kernel.org \
--cc=rostedt@goodmis.org \
/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.