[PATCH v2] cpufreq: intel_pstate: Sync policy->cur when setting min pstate during CPU offline

Fushuai Wang posted 1 patch 4 days, 21 hours ago
drivers/cpufreq/intel_pstate.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
[PATCH v2] cpufreq: intel_pstate: Sync policy->cur when setting min pstate during CPU offline
Posted by Fushuai Wang 4 days, 21 hours ago
From: Fushuai Wang <wangfushuai@baidu.com>

When a CPU goes offline with HWP disabled, intel_pstate_set_min_pstate()
sets the MSR_IA32_PERF_CTL to minimum frequency to prevent SMT siblings
from being restricted. However, the policy->cur value was not updated,
leaving it at the previous value.

When the CPU comes back online, governor->limits() checks if target_freq
equals policy->cur and skips the frequency adjustment if they match. Since
policy->cur still holds the previous value, the governor does not call
cpufreq_driver->target to update MSR_IA32_PERF_CTL.

Fix this by synchronizing policy->cur with the hardware state when setting
minimum pstate during CPU offline.

Fixes: bb18008f8086 ("intel_pstate: Set core to min P state during core offline")
Cc: stable@vger.kernel.org # 3.15+
Suggested-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: Fushuai Wang <wangfushuai@baidu.com>
---
 drivers/cpufreq/intel_pstate.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
index 1292da53e5fc..11db1c887c80 100644
--- a/drivers/cpufreq/intel_pstate.c
+++ b/drivers/cpufreq/intel_pstate.c
@@ -2984,10 +2984,12 @@ static int intel_cpufreq_cpu_offline(struct cpufreq_policy *policy)
 	 * from getting to lower performance levels, so force the minimum
 	 * performance on CPU offline to prevent that from happening.
 	 */
-	if (hwp_active)
+	if (hwp_active) {
 		intel_pstate_hwp_offline(cpu);
-	else
+	} else {
 		intel_pstate_set_min_pstate(cpu);
+		policy->cur = cpu->pstate.min_freq;
+	}
 
 	intel_pstate_exit_perf_limits(policy);
 
-- 
2.36.1
Re: [PATCH v2] cpufreq: intel_pstate: Sync policy->cur when setting min pstate during CPU offline
Posted by Rafael J. Wysocki 2 days, 8 hours ago
On Wed, May 20, 2026 at 5:22 AM Fushuai Wang <fushuai.wang@linux.dev> wrote:
>
> From: Fushuai Wang <wangfushuai@baidu.com>
>
> When a CPU goes offline with HWP disabled, intel_pstate_set_min_pstate()
> sets the MSR_IA32_PERF_CTL to minimum frequency to prevent SMT siblings
> from being restricted. However, the policy->cur value was not updated,
> leaving it at the previous value.
>
> When the CPU comes back online, governor->limits() checks if target_freq
> equals policy->cur and skips the frequency adjustment if they match. Since
> policy->cur still holds the previous value, the governor does not call
> cpufreq_driver->target to update MSR_IA32_PERF_CTL.
>
> Fix this by synchronizing policy->cur with the hardware state when setting
> minimum pstate during CPU offline.
>
> Fixes: bb18008f8086 ("intel_pstate: Set core to min P state during core offline")
> Cc: stable@vger.kernel.org # 3.15+
> Suggested-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
> Signed-off-by: Fushuai Wang <wangfushuai@baidu.com>
> ---
>  drivers/cpufreq/intel_pstate.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
> index 1292da53e5fc..11db1c887c80 100644
> --- a/drivers/cpufreq/intel_pstate.c
> +++ b/drivers/cpufreq/intel_pstate.c
> @@ -2984,10 +2984,12 @@ static int intel_cpufreq_cpu_offline(struct cpufreq_policy *policy)
>          * from getting to lower performance levels, so force the minimum
>          * performance on CPU offline to prevent that from happening.
>          */
> -       if (hwp_active)
> +       if (hwp_active) {
>                 intel_pstate_hwp_offline(cpu);
> -       else
> +       } else {
>                 intel_pstate_set_min_pstate(cpu);
> +               policy->cur = cpu->pstate.min_freq;
> +       }
>
>         intel_pstate_exit_perf_limits(policy);
>
> --

Applied as 7.1-rc material, thanks!