From: Frederic Weisbecker <frederic@kernel.org>
To: Anna-Maria Behnsen <anna-maria@linutronix.de>
Cc: linux-kernel@vger.kernel.org,
Peter Zijlstra <peterz@infradead.org>,
John Stultz <jstultz@google.com>,
Thomas Gleixner <tglx@linutronix.de>,
Eric Dumazet <edumazet@google.com>,
"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
Arjan van de Ven <arjan@infradead.org>,
"Paul E . McKenney" <paulmck@kernel.org>,
Rik van Riel <riel@surriel.com>,
Steven Rostedt <rostedt@goodmis.org>,
Sebastian Siewior <bigeasy@linutronix.de>,
Giovanni Gherdovich <ggherdovich@suse.cz>,
Lukasz Luba <lukasz.luba@arm.com>,
"Gautham R . Shenoy" <gautham.shenoy@amd.com>,
Srinivas Pandruvada <srinivas.pandruvada@intel.com>,
K Prateek Nayak <kprateek.nayak@amd.com>
Subject: Re: [PATCH v9 12/32] timers: Fix nextevt calculation when no timers are pending
Date: Wed, 20 Dec 2023 15:49:55 +0100 [thread overview]
Message-ID: <ZYL_E39vfS_963eg@localhost.localdomain> (raw)
In-Reply-To: <20231201092654.34614-13-anna-maria@linutronix.de>
Le Fri, Dec 01, 2023 at 10:26:34AM +0100, Anna-Maria Behnsen a écrit :
> When no timer is queued into an empty timer base, the next_expiry will not
> be updated. It was originally calculated as
>
> base->clk + NEXT_TIMER_MAX_DELTA
>
> When the timer base stays empty long enough (> NEXT_TIMER_MAX_DELTA), the
> next_expiry value of the empty base suggests that there is a timer pending
> soon. This might be more a kind of a theoretical problem, but the fix
> doesn't hurt.
This solves a real issue. I suggest removing the last sentence and add instead:
If the CPU sleeps in idle for a bit more than NEXT_TIMER_MAX_DELTA
(~12 days in HZ=1000) and then an interrupt fires, upon going back to idle
get_next_timer_interrupt() will still return KTIME_MAX but incorrectly set
is_idle to false. Therefore the CPU will keep the tick stopped and go back to
sleep though further remote enqueue of timers to this CPU will fail to send an IPI.
As a result the timer will remain ignored.
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
next prev parent reply other threads:[~2023-12-20 14:49 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-01 9:26 [PATCH v9 00/32] timers: Move from a push remote at enqueue to a pull at expiry model Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 01/32] tick-sched: Fix function names in comments Anna-Maria Behnsen
2023-12-20 13:09 ` Frederic Weisbecker
2023-12-20 15:59 ` [tip: timers/core] " tip-bot2 for Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 02/32] tick/sched: Cleanup confusing variables Anna-Maria Behnsen
2023-12-20 15:59 ` [tip: timers/core] " tip-bot2 for Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 03/32] tick-sched: Warn when next tick seems to be in the past Anna-Maria Behnsen
2023-12-20 13:27 ` Frederic Weisbecker
2023-12-20 15:59 ` [tip: timers/core] " tip-bot2 for Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 04/32] tracing/timers: Enhance timer_start tracepoint Anna-Maria Behnsen
2023-12-20 13:35 ` Frederic Weisbecker
2023-12-20 15:59 ` [tip: timers/core] " tip-bot2 for Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 05/32] tracing/timers: Add tracepoint for tracking timer base is_idle flag Anna-Maria Behnsen
2023-12-20 13:43 ` Frederic Weisbecker
2023-12-20 15:59 ` [tip: timers/core] " tip-bot2 for Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 06/32] timers: Do not IPI for deferrable timers Anna-Maria Behnsen
2023-12-20 15:59 ` [tip: timers/core] " tip-bot2 for Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 07/32] timers: Move store of next event into __next_timer_interrupt() Anna-Maria Behnsen
2023-12-20 15:59 ` [tip: timers/core] " tip-bot2 for Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 08/32] timers: Clarify check in forward_timer_base() Anna-Maria Behnsen
2023-12-20 15:59 ` [tip: timers/core] " tip-bot2 for Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 09/32] timers: Split out forward timer base functionality Anna-Maria Behnsen
2023-12-20 15:59 ` [tip: timers/core] " tip-bot2 for Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 10/32] timers: Use already existing function for forwarding timer base Anna-Maria Behnsen
2023-12-20 15:59 ` [tip: timers/core] " tip-bot2 for Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 11/32] timers: Rework idle logic Anna-Maria Behnsen
2023-12-20 14:00 ` Frederic Weisbecker
2023-12-20 15:59 ` [tip: timers/core] " tip-bot2 for Thomas Gleixner
2023-12-01 9:26 ` [PATCH v9 12/32] timers: Fix nextevt calculation when no timers are pending Anna-Maria Behnsen
2023-12-04 16:03 ` Sebastian Siewior
2023-12-05 11:53 ` Anna-Maria Behnsen
2023-12-10 0:35 ` Frederic Weisbecker
2023-12-12 13:21 ` Anna-Maria Behnsen
2023-12-12 13:37 ` Frederic Weisbecker
2023-12-20 14:49 ` Frederic Weisbecker [this message]
2023-12-20 15:59 ` [tip: timers/core] " tip-bot2 for Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 13/32] timers: Restructure get_next_timer_interrupt() Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 14/32] timers: Split out get next timer interrupt Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 15/32] timers: Move marking timer bases idle into tick_nohz_stop_tick() Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 16/32] timers: Optimization for timer_base_try_to_set_idle() Anna-Maria Behnsen
2023-12-04 17:52 ` Sebastian Siewior
2023-12-05 12:05 ` Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 17/32] timers: Introduce add_timer() variants which modify timer flags Anna-Maria Behnsen
2023-12-05 18:28 ` Sebastian Siewior
2023-12-06 9:24 ` Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 18/32] workqueue: Use global variant for add_timer() Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 19/32] timers: add_timer_on(): Make sure TIMER_PINNED flag is set Anna-Maria Behnsen
2023-12-05 18:29 ` Sebastian Siewior
2023-12-06 9:57 ` Anna-Maria Behnsen
2023-12-06 10:26 ` Sebastian Siewior
2023-12-06 10:46 ` Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 20/32] timers: Ease code in run_local_timers() Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 21/32] timers: Split next timer interrupt logic Anna-Maria Behnsen
2023-12-05 18:29 ` Sebastian Siewior
2023-12-01 9:26 ` [PATCH v9 22/32] timers: Keep the pinned timers separate from the others Anna-Maria Behnsen
2023-12-05 21:11 ` Sebastian Siewior
2023-12-06 10:23 ` Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 23/32] timers: Retrieve next expiry of pinned/non-pinned timers separately Anna-Maria Behnsen
2023-12-06 9:47 ` Sebastian Siewior
2023-12-07 10:12 ` Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 24/32] timers: Split out "get next timer interrupt" functionality Anna-Maria Behnsen
2023-12-06 10:20 ` Sebastian Siewior
2023-12-01 9:26 ` [PATCH v9 25/32] timers: Add get next timer interrupt functionality for remote CPUs Anna-Maria Behnsen
2023-12-06 10:44 ` Sebastian Siewior
2023-12-07 10:27 ` Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 26/32] timers: Restructure internal locking Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 27/32] timers: Check if timers base is handled already Anna-Maria Behnsen
2023-12-06 10:58 ` Sebastian Siewior
2023-12-01 9:26 ` [PATCH v9 28/32] tick/sched: Split out jiffies update helper function Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 29/32] timers: Introduce function to check timer base is_idle flag Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 30/32] timers: Implement the hierarchical pull model Anna-Maria Behnsen
2023-12-06 16:35 ` Sebastian Siewior
2023-12-08 9:01 ` Anna-Maria Behnsen
2023-12-07 18:09 ` Sebastian Siewior
2023-12-08 10:31 ` Anna-Maria Behnsen
2023-12-08 18:18 ` Sebastian Siewior
2023-12-11 18:04 ` Sebastian Siewior
2023-12-12 11:31 ` Anna-Maria Behnsen
2023-12-12 11:43 ` Anna-Maria Behnsen
2023-12-12 15:59 ` Sebastian Siewior
2023-12-12 12:14 ` Sebastian Siewior
2023-12-12 14:52 ` Anna-Maria Behnsen
2023-12-12 17:08 ` Sebastian Siewior
2023-12-01 9:26 ` [PATCH v9 31/32] timer_migration: Add tracepoints Anna-Maria Behnsen
2023-12-01 9:26 ` [PATCH v9 32/32] timers: Always queue timers on the local CPU Anna-Maria Behnsen
2023-12-07 12:11 ` [PATCH v9 00/32] timers: Move from a push remote at enqueue to a pull at expiry model Anna-Maria Behnsen
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=ZYL_E39vfS_963eg@localhost.localdomain \
--to=frederic@kernel.org \
--cc=anna-maria@linutronix.de \
--cc=arjan@infradead.org \
--cc=bigeasy@linutronix.de \
--cc=edumazet@google.com \
--cc=gautham.shenoy@amd.com \
--cc=ggherdovich@suse.cz \
--cc=jstultz@google.com \
--cc=kprateek.nayak@amd.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lukasz.luba@arm.com \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=rafael.j.wysocki@intel.com \
--cc=riel@surriel.com \
--cc=rostedt@goodmis.org \
--cc=srinivas.pandruvada@intel.com \
--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