[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAJZ5v0i3B9LQmU-o5Reh6T+sVEPeGqMvEf7f_3Wdh6jc+sRBeA@mail.gmail.com>
Date: Wed, 10 Sep 2025 12:26:40 +0200
From: "Rafael J. Wysocki" <rafael@...nel.org>
To: Sohil Mehta <sohil.mehta@...el.com>
Cc: "Rafael J . Wysocki" <rafael@...nel.org>, Viresh Kumar <viresh.kumar@...aro.org>, linux-pm@...r.kernel.org,
x86@...nel.org, Tony Luck <tony.luck@...el.com>, Zhao Liu <zhao1.liu@...ux.intel.com>,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v4] cpufreq: ondemand: Update the efficient idle check for
Intel extended Families
On Tue, Sep 9, 2025 at 1:08 AM Sohil Mehta <sohil.mehta@...el.com> wrote:
>
> IO time is considered busy by default for modern Intel processors. The
> current check covers recent Family 6 models but excludes the brand new
> Families 18 and 19.
>
> According to Arjan van de Ven, the model check was mainly due to a lack
> of testing on systems before INTEL_CORE2_MEROM. He suggests considering
> all Intel processors as having an efficient idle.
>
> Extend the IO busy classification to all Intel processors starting with
> Family 6, including Family 15 (Pentium 4s) and upcoming Families 18/19.
>
> Use an x86 VFM check and move the function to the header file to avoid
> using arch-specific #ifdefs in the C file.
>
> Signed-off-by: Sohil Mehta <sohil.mehta@...el.com>
Applied (with a minor whitespace adjustment) as 6.18 material, thanks!
> ---
> v4:
> - Move the function check to the header file as an inline function.
> - Combine x86 specific #ifdefs.
>
> v3: https://lore.kernel.org/lkml/20250826183644.220093-1-sohil.mehta@intel.com/
> - Posting this patch separately since the core family cleanup series
> was merged without it.
> - Improve commit message and code comments.
> ---
> drivers/cpufreq/cpufreq_ondemand.c | 25 +------------------------
> drivers/cpufreq/cpufreq_ondemand.h | 22 ++++++++++++++++++++++
> 2 files changed, 23 insertions(+), 24 deletions(-)
>
> diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
> index 0e65d37c9231..a6ecc203f7b7 100644
> --- a/drivers/cpufreq/cpufreq_ondemand.c
> +++ b/drivers/cpufreq/cpufreq_ondemand.c
> @@ -29,29 +29,6 @@ static struct od_ops od_ops;
>
> static unsigned int default_powersave_bias;
>
> -/*
> - * Not all CPUs want IO time to be accounted as busy; this depends on how
> - * efficient idling at a higher frequency/voltage is.
> - * Pavel Machek says this is not so for various generations of AMD and old
> - * Intel systems.
> - * Mike Chan (android.com) claims this is also not true for ARM.
> - * Because of this, whitelist specific known (series) of CPUs by default, and
> - * leave all others up to the user.
> - */
> -static int should_io_be_busy(void)
> -{
> -#if defined(CONFIG_X86)
> - /*
> - * For Intel, Core 2 (model 15) and later have an efficient idle.
> - */
> - if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL &&
> - boot_cpu_data.x86 == 6 &&
> - boot_cpu_data.x86_model >= 15)
> - return 1;
> -#endif
> - return 0;
> -}
> -
> /*
> * Find right freq to be set now with powersave_bias on.
> * Returns the freq_hi to be used right now and will set freq_hi_delay_us,
> @@ -377,7 +354,7 @@ static int od_init(struct dbs_data *dbs_data)
> dbs_data->sampling_down_factor = DEF_SAMPLING_DOWN_FACTOR;
> dbs_data->ignore_nice_load = 0;
> tuners->powersave_bias = default_powersave_bias;
> - dbs_data->io_is_busy = should_io_be_busy();
> + dbs_data->io_is_busy = od_should_io_be_busy();
>
> dbs_data->tuners = tuners;
> return 0;
> diff --git a/drivers/cpufreq/cpufreq_ondemand.h b/drivers/cpufreq/cpufreq_ondemand.h
> index 1af8e5c4b86f..eb35ec19fa86 100644
> --- a/drivers/cpufreq/cpufreq_ondemand.h
> +++ b/drivers/cpufreq/cpufreq_ondemand.h
> @@ -24,3 +24,25 @@ static inline struct od_policy_dbs_info *to_dbs_info(struct policy_dbs_info *pol
> struct od_dbs_tuners {
> unsigned int powersave_bias;
> };
> +
> +#ifdef CONFIG_X86
> +#include <asm/cpu_device_id.h>
> +/*
> + * Not all CPUs want IO time to be accounted as busy; this depends on
> + * how efficient idling at a higher frequency/voltage is.
> + *
> + * Pavel Machek says this is not so for various generations of AMD and
> + * old Intel systems. Mike Chan (android.com) claims this is also not
> + * true for ARM.
> + *
> + * Because of this, select a known series of Intel CPUs (Family 6 and
> + * later) by default, and leave all others up to the user.
> + */
> +static inline bool od_should_io_be_busy(void)
> +{
> + return (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL &&
> + boot_cpu_data.x86_vfm >= INTEL_PENTIUM_PRO);
> +}
> +#else
> +static inline bool od_should_io_be_busy(void) { return false; }
> +#endif
> --
> 2.43.0
>
Powered by blists - more mailing lists