From: Frederic Weisbecker <frederic@kernel.org>
To: Peng Wang <peng_wang@linux.alibaba.com>
Cc: Anna-Maria Behnsen <anna-maria@linutronix.de>,
Ingo Molnar <mingo@kernel.org>, Thomas Gleixner <tglx@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
He Rongguang <herongguang@linux.alibaba.com>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] tick/nohz: Requeue kicks flushed outside hardirq context
Date: Thu, 22 Oct 2026 16:36:57 +0200 [thread overview]
Message-ID: <atofid9HivdbUuj2@localhost.localdomain> (raw)
In-Reply-To: <43668cf88d976084e2865ec07dea82b64ad402ba.1792240863.git.peng_wang@linux.alibaba.com>
Le Sat, Oct 17, 2026 at 08:59:00PM +0800, Peng Wang a écrit :
> A remote nohz kick can be flushed from task context after idle exit
> has checked tick dependencies. If polling suppressed the IPI, the empty
> callback is consumed without an IRQ exit to reevaluate the tick. A newly
> set dependency can then leave the non-idle tick stopped until another
> interrupt arrives.
>
> Requeue the work locally when it runs outside hardirq context on an
> online CPU. This raises the IRQ needed for the existing tick reevaluation
> path. Skip offline CPUs whose pending work is being drained during
> teardown.
>
> Fixes: 4b44a21dd640 ("irq_work, smp: Allow irq_work on call_single_queue")
> Fixes: a5183862e76f ("tick/nohz: Conditionally restart tick on idle exit")
> Co-developed-by: He Rongguang <herongguang@linux.alibaba.com>
> Signed-off-by: He Rongguang <herongguang@linux.alibaba.com>
> Signed-off-by: Peng Wang <peng_wang@linux.alibaba.com>
> ---
> kernel/time/tick-sched.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
> index 6c3fea386713..87e2a7a87526 100644
> --- a/kernel/time/tick-sched.c
> +++ b/kernel/time/tick-sched.c
> @@ -402,7 +402,12 @@ static bool can_stop_full_tick(int cpu, struct tick_sched *ts)
>
> static void nohz_full_kick_func(struct irq_work *work)
> {
> - /* Empty, the tick restart happens on tick_nohz_irq_exit() */
> + /*
> + * Remote irq_work may be flushed from task context. Force an IRQ
> + * exit to reevaluate the tick unless this CPU is going offline.
> + */
> + if (!in_hardirq() && cpu_online(smp_processor_id()))
> + irq_work_queue(work);
Good catch but instead of requeuing, why not restarting the tick directly from
here instead of from IRQ exit?
Thanks.
> }
>
> static DEFINE_PER_CPU(struct irq_work, nohz_full_kick_work) =
>
> base-commit: 70dd4ee72eb2d5793c62e71c14e3aba78e5a4e56
> --
> 2.47.0
>
--
Frederic Weisbecker
SUSE Labs
next prev parent reply other threads:[~2026-10-22 14:37 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-17 12:59 [PATCH] tick/nohz: Requeue kicks flushed outside hardirq context Peng Wang
2026-10-22 14:36 ` Frederic Weisbecker [this message]
2026-10-22 17:54 ` [PATCH v2] tick/nohz: Reevaluate the tick for kicks flushed outside hardirq Peng Wang
2026-10-23 13:31 ` Frederic Weisbecker
2026-10-23 14:51 ` [PATCH v3] " Peng Wang
2026-10-23 15:07 ` Frederic Weisbecker
2026-10-25 21:47 ` [tip: timers/urgent] " tip-bot2 for Peng Wang
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=atofid9HivdbUuj2@localhost.localdomain \
--to=frederic@kernel.org \
--cc=anna-maria@linutronix.de \
--cc=herongguang@linux.alibaba.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peng_wang@linux.alibaba.com \
--cc=peterz@infradead.org \
--cc=tglx@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.