All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oleg Nesterov <oleg@redhat.com>
To: Tejun Heo <tj@kernel.org>
Cc: Leonardo Bras <leobras@redhat.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Lai Jiangshan <jiangshanlai@gmail.com>,
	linux-kernel@vger.kernel.org, Junyao Zhao <junzhao@redhat.com>,
	Chris von Recklinghausen <crecklin@redhat.com>,
	Frederic Weisbecker <frederic@kernel.org>
Subject: Re: [PATCH v2 1/1] wq: Avoid using isolated cpus' timers on queue_delayed_work
Date: Wed, 3 Apr 2024 22:38:14 +0200	[thread overview]
Message-ID: <20240403203814.GD31764@redhat.com> (raw)
In-Reply-To: <Zg2qFinSkAOmRHcM@slm.duckdns.org>

Hi Tejun,

On 04/03, Tejun Heo wrote:
>
> (cc'ing Frederic and quoting whole body)
>
> Hello, Oleg.
>
> On Tue, Apr 02, 2024 at 12:58:47PM +0200, Oleg Nesterov wrote:
> > This patch was applied as aae17ebb53cd3da but as Chris reports with this
> > commit the kernel can crash at boot time because __queue_delayed_work()
> > doesn't check that housekeeping_any_cpu() returns a valid cpu < nr_cpu_ids.
> >
> > Just boot the kernel with nohz_full=mask which includes the boot cpu, say
> > nohz_full=0-6 on a machine with 8 CPUs. __queue_delayed_work() will use
> > add_timer_on(timer, NR_CPUS /* returned by housekeeping_any_cpu */) until
> > start_secondary() brings CPU 7 up.
> >
> > The problem is simple, but I do not know what should we do, I know nothing
> > about CPU isolation.
> >
> > We can fix __queue_delayed_work(), this is simple, but other callers of
> > housekeeping_any_cpu() seem to assume it must always return a valid CPU
> > too. So perhaps we should change housekeeping_any_cpu()
>
> Yeah, patching this up from wq side is easy but housekeeping_any_cpu()
> always being able to pick a housekeeping CPU would be better.
>
> > -			return cpumask_any_and(housekeeping.cpumasks[type], cpu_online_mask);
> > +			cpu = cpumask_any_and(housekeeping.cpumasks[type], cpu_online_mask);
> > +			if (cpu < nr_cpu_ids)
> > +				return cpu;
> >
> > ?
> >
> > But I'm afraid this can hide other problems. May be
> >
> > -			return cpumask_any_and(housekeeping.cpumasks[type], cpu_online_mask);
> > +			cpu = cpumask_any_and(housekeeping.cpumasks[type], cpu_online_mask);
> > +			if (cpu < nr_cpu_ids)
> > +				return cpu;
> > +
> > +			WARN_ON(system_state > SYSTEM_BOOTING);
> >
> > ?
> >
> > -------------------------------------------------------------------------------
> > OTOH, Documentation/timers/no_hz.rst says
> >
> > 	Therefore, the
> > 	boot CPU is prohibited from entering adaptive-ticks mode.  Specifying a
> > 	"nohz_full=" mask that includes the boot CPU will result in a boot-time
> > 	error message, and the boot CPU will be removed from the mask.
> >
> > and this doesn't match the reality.
>
> Don't some archs allow the boot CPU to go down too tho? If so, this doesn't
> really solve the problem, right?

I do not know. But I thought about this too.

In the context of this discussion we do not care if the boot CPU goes down.
But we need at least one housekeeping CPU after cpu_down(). The comment in
cpu_down_maps_locked() says

	Also keep at least one housekeeping cpu onlined

but it checks HK_TYPE_DOMAIN, and I do not know (and it is too late for me
to try to read the code ;) if housekeeping.cpumasks[HK_TYPE_TIMER] can get
empty or not.

Oleg.	

> > So it seems that we should fix housekeeping_setup() ? see the patch below.
> >
> > In any case the usage of cpu_present_mask doesn't look right to me.
> >
> > Oleg.
> >
> > --- a/kernel/sched/isolation.c
> > +++ b/kernel/sched/isolation.c
> > @@ -129,7 +154,7 @@ static int __init housekeeping_setup(char *str, unsigned long flags)
> >  	cpumask_andnot(housekeeping_staging,
> >  		       cpu_possible_mask, non_housekeeping_mask);
> >
> > -	if (!cpumask_intersects(cpu_present_mask, housekeeping_staging)) {
> > +	if (!cpumask_test_cpu(smp_processor_id(), housekeeping_staging)) {
> >  		__cpumask_set_cpu(smp_processor_id(), housekeeping_staging);
> >  		__cpumask_clear_cpu(smp_processor_id(), non_housekeeping_mask);
> >  		if (!housekeeping.flags) {
> >


  reply	other threads:[~2024-04-03 20:39 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-30  1:00 [PATCH v2 1/1] wq: Avoid using isolated cpus' timers on queue_delayed_work Leonardo Bras
2024-01-30  1:22 ` Tejun Heo
2024-01-30  2:58   ` Leonardo Bras
2024-04-02 10:58 ` Oleg Nesterov
2024-04-03 19:12   ` Tejun Heo
2024-04-03 20:38     ` Oleg Nesterov [this message]
2024-04-05 14:04       ` Oleg Nesterov
2024-04-05 15:38         ` Tejun Heo
2024-04-05 22:03           ` Frederic Weisbecker
2024-04-05 21:52         ` Nohz_full on boot CPU is broken (was: Re: [PATCH v2 1/1] wq: Avoid using isolated cpus' timers on queue_delayed_work) Frederic Weisbecker
2024-04-07 13:09           ` Oleg Nesterov
2024-04-07 13:52             ` Oleg Nesterov
2024-04-09 12:05               ` Frederic Weisbecker
2024-04-09 12:04             ` Frederic Weisbecker
2024-04-09 13:07               ` Oleg Nesterov
2024-04-09 13:59                 ` Frederic Weisbecker
2024-04-10  4:26                 ` Nicholas Piggin
2024-04-10 13:55                   ` Oleg Nesterov
2024-04-11 13:41                     ` Oleg Nesterov
2024-04-11 14:39   ` [PATCH] sched/isolation: fix boot crash when the boot CPU is nohz_full Oleg Nesterov
2024-04-11 16:59     ` Oleg Nesterov
2024-04-13 14:17     ` [PATCH] sched/isolation: fix boot crash when maxcpus < first-housekeeping-cpu Oleg Nesterov
2024-04-18 14:54       ` Phil Auld
2024-04-18 15:40       ` Frederic Weisbecker
2024-04-24 20:05       ` [tip: sched/urgent] sched/isolation: Fix boot crash when maxcpus < first housekeeping CPU tip-bot2 for Oleg Nesterov
2024-04-28  8:13         ` Ingo Molnar
2024-04-28 13:16           ` Oleg Nesterov
2024-04-28  8:24       ` tip-bot2 for Oleg Nesterov
2024-04-15 21:37     ` [PATCH] sched/isolation: fix boot crash when the boot CPU is nohz_full Frederic Weisbecker
2024-04-18 14:50     ` Phil Auld
2024-04-22 18:50       ` Oleg Nesterov
2024-04-24 14:42         ` Phil Auld
2024-04-24 20:05     ` [tip: sched/urgent] sched/isolation: {revent " tip-bot2 for Oleg Nesterov
2024-04-24 20:41       ` Phil Auld
2024-04-28  8:14         ` Ingo Molnar
2024-04-29 11:50           ` Phil Auld
2024-04-28  8:24     ` [tip: sched/urgent] sched/isolation: Prevent " tip-bot2 for Oleg Nesterov
2024-10-04 12:37 ` [PATCH v2 1/1] wq: Avoid using isolated cpus' timers on queue_delayed_work Frederic Weisbecker
2024-10-04 22:43   ` Leonardo Bras Soares Passos
2024-10-05 11:15     ` Frederic Weisbecker

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=20240403203814.GD31764@redhat.com \
    --to=oleg@redhat.com \
    --cc=crecklin@redhat.com \
    --cc=frederic@kernel.org \
    --cc=jiangshanlai@gmail.com \
    --cc=junzhao@redhat.com \
    --cc=leobras@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=tj@kernel.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.