From: Peter Zijlstra <peterz@infradead.org>
To: "Liam R. Howlett" <Liam.Howlett@oracle.com>,
Andrew Morton <akpm@linux-foundation.org>,
maple-tree@lists.infradead.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, stable@vger.kernel.org,
Geert Uytterhoeven <geert@linux-m68k.org>,
"Paul E. McKenney" <paulmck@kernel.org>,
Christophe Leroy <christophe.leroy@csgroup.eu>,
Andreas Schwab <schwab@linux-m68k.org>,
Matthew Wilcox <willy@infradead.org>,
Peng Zhang <zhangpeng.00@bytedance.com>,
Ingo Molnar <mingo@redhat.com>,
Juri Lelli <juri.lelli@redhat.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
"Mike Rapoport (IBM)" <rppt@kernel.org>,
Vlastimil Babka <vbabka@suse.cz>
Subject: Re: [PATCH] init/main: Clear boot task idle flag
Date: Thu, 14 Sep 2023 09:13:46 +0200 [thread overview]
Message-ID: <20230914071346.GA16631@noisy.programming.kicks-ass.net> (raw)
In-Reply-To: <20230913173238.h6tj4lwsbdxcuswo@revolver>
On Wed, Sep 13, 2023 at 01:32:38PM -0400, Liam R. Howlett wrote:
> * Peter Zijlstra <peterz@infradead.org> [230913 12:13]:
> > On Wed, Sep 13, 2023 at 10:51:25AM -0400, Liam R. Howlett wrote:
> > > * Peter Zijlstra <peterz@infradead.org> [230913 09:53]:
> > > > On Tue, Sep 12, 2023 at 08:56:47PM -0400, Liam R. Howlett wrote:
> > > >
> > > > > diff --git a/init/main.c b/init/main.c
> > > > > index ad920fac325c..f74772acf612 100644
> > > > > --- a/init/main.c
> > > > > +++ b/init/main.c
> > > > > @@ -696,7 +696,7 @@ noinline void __ref __noreturn rest_init(void)
> > > > > */
> > > > > rcu_read_lock();
> > > > > tsk = find_task_by_pid_ns(pid, &init_pid_ns);
> > > > > - tsk->flags |= PF_NO_SETAFFINITY;
> > > > > + tsk->flags |= PF_NO_SETAFFINITY | PF_IDLE;
> > > > > set_cpus_allowed_ptr(tsk, cpumask_of(smp_processor_id()));
> > > > > rcu_read_unlock();
> > > > >
> > > >
> > > > Hmm, isn't that pid-1 you're setting PF_IDLE on?
> > >
> > > Yes, thanks. I think that is what Geert is hitting with my patch.
> > >
> > > debug __might_resched() in kernel/sched/core.c is failing to return in
> > > that first (complex) if statement. His report says pid 1 so this is
> > > likely the issue.
> > >
> > > >
> > > > The task becoming idle is 'current' at this point, see the
> > > > cpu_startup_entry() call below.
> > > >
> > > > Would not something like so be the right thing?
> > > >
> > > >
> > > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> > > > index 2299a5cfbfb9..802551e0009b 100644
> > > > --- a/kernel/sched/core.c
> > > > +++ b/kernel/sched/core.c
> > > > @@ -9269,7 +9269,7 @@ void __init init_idle(struct task_struct *idle, int cpu)
> > > > * PF_KTHREAD should already be set at this point; regardless, make it
> > > > * look like a proper per-CPU kthread.
> > > > */
> > > > - idle->flags |= PF_IDLE | PF_KTHREAD | PF_NO_SETAFFINITY;
> > > > + idle->flags |= PF_KTHREAD | PF_NO_SETAFFINITY;
> > >
> > > I am concerned this will alter more than just the current task, which
> > > would mean more modifications later. There is a comment about it being
> > > called 'more than once' and 'per cpu' so I am hesitant to change the
> > > function itself.
> > >
> > > Although I am unsure of the call path.. fork_idle() -> init_idle() I
> > > guess?
> >
> > There's only 2 ways to get into do_idle(), through cpu_startup_entry()
> > and play_idle_precise(). The latter already frobs PF_IDLE since it is
> > the forced idle path, this then leaves cpu_startup_entry() which is the
> > regular idle path.
> >
> > All idle threads will end up calling into it, the boot CPU through the
> > rest_init() and the SMP cpus through arch SMP bringup.
> >
> > IOW, this ensures all idle loops will have PF_IDLE set but not the
> > pre-idle loop setup code these threads run.
>
> Thanks for the information. This does leave the init_idle() function in
> the odd state of not setting PF_IDLE, but I guess that's okay?
Yep, the few things that care about PF_IDLE seem to really only care
about do_idle() and very much not (per the rcutiny thing) any code that
comes before it.
next prev parent reply other threads:[~2023-09-14 7:14 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-13 0:56 [PATCH] init/main: Clear boot task idle flag Liam R. Howlett
2023-09-13 11:01 ` Peter Zijlstra
2023-09-13 11:28 ` Paul E. McKenney
2023-09-13 13:18 ` Liam R. Howlett
2023-09-13 12:58 ` Geert Uytterhoeven
2023-09-13 13:52 ` Peter Zijlstra
2023-09-13 14:51 ` Liam R. Howlett
2023-09-13 16:12 ` Peter Zijlstra
2023-09-13 17:32 ` Liam R. Howlett
2023-09-14 7:13 ` Peter Zijlstra [this message]
2023-09-14 16:05 ` kernel test robot
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=20230914071346.GA16631@noisy.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=christophe.leroy@csgroup.eu \
--cc=geert@linux-m68k.org \
--cc=juri.lelli@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=maple-tree@lists.infradead.org \
--cc=mingo@redhat.com \
--cc=paulmck@kernel.org \
--cc=rppt@kernel.org \
--cc=schwab@linux-m68k.org \
--cc=stable@vger.kernel.org \
--cc=vbabka@suse.cz \
--cc=vincent.guittot@linaro.org \
--cc=willy@infradead.org \
--cc=zhangpeng.00@bytedance.com \
/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.