From: "Nicholas Piggin" <npiggin@gmail.com>
To: "Oleg Nesterov" <oleg@redhat.com>
Cc: "Thomas Gleixner" <tglx@linutronix.de>,
"Frederic Weisbecker" <frederic@kernel.org>,
"Ingo Molnar" <mingo@redhat.com>,
"Peter Zijlstra" <peterz@infradead.org>,
"Phil Auld" <pauld@redhat.com>,
"Chris von Recklinghausen" <crecklin@redhat.com>,
<linux-kernel@vger.kernel.org>
Subject: Re: sched/isolation: tick_take_do_timer_from_boot() calls smp_call_function_single() with irqs disabled
Date: Tue, 28 May 2024 11:02:03 +1000 [thread overview]
Message-ID: <D1KVETKKSRHL.18ZTVKAN8JS3Y@gmail.com> (raw)
In-Reply-To: <20240527155739.GB5733@redhat.com>
On Tue May 28, 2024 at 1:57 AM AEST, Oleg Nesterov wrote:
> On 05/27, Nicholas Piggin wrote:
> >
> > On Mon May 27, 2024 at 5:27 AM AEST, Oleg Nesterov wrote:
> > > The more I grep the more I confused.
> > >
> > > On 05/25, Thomas Gleixner wrote:
> > > >
> > > > Right. It does not happen because the kernel starts with jiffies as
> > > > clocksource except on S390. The jiffies clocksource is not qualified to
> > > > switch over to NOHZ mode for obvious reasons.
> > >
> > > Not obvious for those who never looked at this code ;)
> > >
> > > OK, clocksource_jiffies doesn't have CLOCK_SOURCE_VALID_FOR_HRES,
> >
> > jiffies clocksource requires a timer to run it I suppose.
>
> I meant, this is enough to ensure that clocksource_done_booting() paths should
> find another cs, best != curr_clocksource, and call timekeeping_notify().
>
> Nevermind, quite possibly I misread this code.
>
> > > And I still don't understand why we can rely on can_stop_idle_tick() even
> > > in tick_nohz_idle_stop_tick().
> >
> > AFAIKS timer_expires_base would be 0 unless tick_nohz_next_event()
> > were called, but that is only called from places that checked
> > can_stop_idle_tick() or is already a tick_nohz_full() CPU.
>
> OK, thanks.
>
> So, Frederic, Nicholas, any objections to the trivial change below?
Since Thomas says it's alright, then no. I guess I added it because I
was not certain about taking the tick_do_timer_cpu while the boot CPU
could be running a timer interrupt.
I would take some of his comment to explain the race is harmless and
put it in that if block.
Out of curiosity, you are getting this going on x86? Or another arch?
Any particular use-case?
Thanks,
Nick
>
> We can cleanup the tick_do_timer_boot_cpu logic on top of it.
>
> Oleg.
>
> --- a/kernel/time/tick-common.c
> +++ b/kernel/time/tick-common.c
> @@ -178,26 +178,6 @@ void tick_setup_periodic(struct clock_event_device *dev, int broadcast)
> }
> }
>
> -#ifdef CONFIG_NO_HZ_FULL
> -static void giveup_do_timer(void *info)
> -{
> - int cpu = *(unsigned int *)info;
> -
> - WARN_ON(tick_do_timer_cpu != smp_processor_id());
> -
> - tick_do_timer_cpu = cpu;
> -}
> -
> -static void tick_take_do_timer_from_boot(void)
> -{
> - int cpu = smp_processor_id();
> - int from = tick_do_timer_boot_cpu;
> -
> - if (from >= 0 && from != cpu)
> - smp_call_function_single(from, giveup_do_timer, &cpu, 1);
> -}
> -#endif
> -
> /*
> * Setup the tick device
> */
> @@ -231,9 +211,8 @@ static void tick_setup_device(struct tick_device *td,
>
> } else if (tick_do_timer_boot_cpu != -1 &&
> !tick_nohz_full_cpu(cpu)) {
> - tick_take_do_timer_from_boot();
> tick_do_timer_boot_cpu = -1;
> - WARN_ON(READ_ONCE(tick_do_timer_cpu) != cpu);
> + WRITE_ONCE(tick_do_timer_cpu, cpu);
> #endif
> }
>
next prev parent reply other threads:[~2024-05-28 1:02 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-22 15:17 sched/isolation: tick_take_do_timer_from_boot() calls smp_call_function_single() with irqs disabled Oleg Nesterov
2024-05-23 13:23 ` Oleg Nesterov
2024-05-24 9:31 ` Thomas Gleixner
2024-05-24 14:10 ` Oleg Nesterov
2024-05-24 15:22 ` Frederic Weisbecker
2024-05-24 15:20 ` Frederic Weisbecker
2024-05-24 17:16 ` Thomas Gleixner
2024-05-24 18:37 ` Oleg Nesterov
2024-05-24 22:06 ` Thomas Gleixner
2024-05-25 13:51 ` Oleg Nesterov
2024-05-25 14:13 ` Oleg Nesterov
2024-05-26 19:27 ` Oleg Nesterov
2024-05-26 20:52 ` Frederic Weisbecker
2024-05-27 15:57 ` Oleg Nesterov
2024-05-27 11:01 ` Nicholas Piggin
2024-05-27 15:57 ` Oleg Nesterov
2024-05-28 1:02 ` Nicholas Piggin [this message]
2024-05-28 12:19 ` Oleg Nesterov
2024-05-27 16:13 ` Thomas Gleixner
2024-05-26 20:57 ` Frederic Weisbecker
2024-05-27 9:10 ` Nicholas Piggin
2024-05-27 10:23 ` Thomas Gleixner
2024-05-27 11:16 ` Nicholas Piggin
2024-05-28 12:20 ` [PATCH] tick/nohz_full: don't abuse smp_call_function_single() in tick_setup_device() Oleg Nesterov
2024-05-28 12:22 ` Oleg Nesterov
2024-05-30 12:40 ` [PATCH] tick/nohz_full: turn tick_do_timer_boot_cpu into boot_cpu_is_nohz_full Oleg Nesterov
2024-06-03 15:35 ` [PATCH v2] " Oleg Nesterov
2024-06-03 21:44 ` Frederic Weisbecker
2024-06-04 5:08 ` Nicholas Piggin
2024-05-30 14:52 ` [PATCH] tick/nohz_full: don't abuse smp_call_function_single() in tick_setup_device() Frederic Weisbecker
2024-05-30 16:52 ` Oleg Nesterov
2024-05-30 17:01 ` Oleg Nesterov
2024-06-01 14:03 ` Oleg Nesterov
2024-06-02 21:29 ` Frederic Weisbecker
2024-06-03 15:41 ` Oleg Nesterov
2024-06-03 21:45 ` Frederic Weisbecker
2024-06-10 15:55 ` [PING ;)] " Oleg Nesterov
2024-06-10 18:15 ` Thomas Gleixner
2024-06-10 18:26 ` [tip: timers/urgent] tick/nohz_full: Don't " tip-bot2 for Oleg Nesterov
2024-06-10 19:42 ` 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=D1KVETKKSRHL.18ZTVKAN8JS3Y@gmail.com \
--to=npiggin@gmail.com \
--cc=crecklin@redhat.com \
--cc=frederic@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=oleg@redhat.com \
--cc=pauld@redhat.com \
--cc=peterz@infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox