From: Christian Loehle <christian.loehle@arm.com>
To: "Rafael J. Wysocki" <rafael@kernel.org>,
Linux PM <linux-pm@vger.kernel.org>
Cc: Marc Zyngier <maz@kernel.org>,
LKML <linux-kernel@vger.kernel.org>,
Artem Bityutskiy <artem.bityutskiy@linux.intel.com>,
Aboorva Devarajan <aboorvad@linux.ibm.com>
Subject: Re: [PATCH v1] cpuidle: governors: menu: Avoid using invalid recent intervals data
Date: Mon, 11 Aug 2025 16:50:52 +0100 [thread overview]
Message-ID: <5a2c4b1c-e3ef-4d1d-ae93-ff744fdd7bf6@arm.com> (raw)
In-Reply-To: <2793874.mvXUDI8C0e@rafael.j.wysocki>
On 8/11/25 16:03, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
>
> Marc has reported that commit 85975daeaa4d ("cpuidle: menu: Avoid
> discarding useful information") caused the number of wakeup interrupts
> to increase on an idle system [1], which was not expected to happen
> after merely allowing shallower idle states to be selected by the
> governor in some cases.
>
> However, on the system in question, all of the idle states deeper than
> WFI are rejected by the driver due to a firmware issue [2]. This causes
> the governor to only consider the recent interval duriation data
duration
> corresponding to attempts to enter WFI that are successful and the
> recent invervals table is filled with values lower than the scheduler
intervals
> tick period. Consequently, the governor predicts an idle duration
> below the scheduler tick period length and avoids stopping the tick
> more often which leads to the observed symptom.
>
> Address it by modifying the governor to update the recent intervals
> table also when entering the previously selected idle state fails, so
> it knows that the short idle intervals might have been the minority
> had the selected idle states been actually entered every time.
>
> Fixes: 85975daeaa4d ("cpuidle: menu: Avoid discarding useful information")
> Link: https://lore.kernel.org/linux-pm/86o6sv6n94.wl-maz@kernel.org/ [1]
> Link: https://lore.kernel.org/linux-pm/7ffcb716-9a1b-48c2-aaa4-469d0df7c792@arm.com/ [2]
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> Tested-by: Christian Loehle <christian.loehle@arm.com>
> Tested-by: Marc Zyngier <maz@kernel.org>
Reviewed-by: Christian Loehle <christian.loehle@arm.com>
> ---
> drivers/cpuidle/governors/menu.c | 21 +++++++++++++++++----
> 1 file changed, 17 insertions(+), 4 deletions(-)
>
> --- a/drivers/cpuidle/governors/menu.c
> +++ b/drivers/cpuidle/governors/menu.c
> @@ -97,6 +97,14 @@
>
> static DEFINE_PER_CPU(struct menu_device, menu_devices);
>
> +static void menu_update_intervals(struct menu_device *data, unsigned int interval_us)
> +{
> + /* Update the repeating-pattern data. */
> + data->intervals[data->interval_ptr++] = interval_us;
> + if (data->interval_ptr >= INTERVALS)
> + data->interval_ptr = 0;
> +}
> +
> static void menu_update(struct cpuidle_driver *drv, struct cpuidle_device *dev);
>
> /*
> @@ -222,6 +230,14 @@
> if (data->needs_update) {
> menu_update(drv, dev);
> data->needs_update = 0;
> + } else if (!dev->last_residency_ns) {
> + /*
> + * This happens when the driver rejects the previously selected
> + * idle state and returns an error, so update the recent
> + * intervals table to prevent invalid information from being
> + * used going forward.
> + */
> + menu_update_intervals(data, UINT_MAX);
> }
>
> /* Find the shortest expected idle interval. */
> @@ -482,10 +498,7 @@
>
> data->correction_factor[data->bucket] = new_factor;
>
> - /* update the repeating-pattern data */
> - data->intervals[data->interval_ptr++] = ktime_to_us(measured_ns);
> - if (data->interval_ptr >= INTERVALS)
> - data->interval_ptr = 0;
> + menu_update_intervals(data, ktime_to_us(measured_ns));
> }
>
> /**
>
>
>
prev parent reply other threads:[~2025-08-11 15:50 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-11 15:03 [PATCH v1] cpuidle: governors: menu: Avoid using invalid recent intervals data Rafael J. Wysocki
2025-08-11 15:50 ` Christian Loehle [this message]
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=5a2c4b1c-e3ef-4d1d-ae93-ff744fdd7bf6@arm.com \
--to=christian.loehle@arm.com \
--cc=aboorvad@linux.ibm.com \
--cc=artem.bityutskiy@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=maz@kernel.org \
--cc=rafael@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.