]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
cpufreq: Don't skip cpufreq_frequency_table_cpuinfo()
authorViresh Kumar <viresh.kumar@linaro.org>
Fri, 20 Mar 2026 09:24:06 +0000 (14:54 +0530)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 23 Mar 2026 12:32:57 +0000 (13:32 +0100)
The commit 6db0f533d320 ("cpufreq: preserve freq_table_sorted
across suspend/hibernate") unintentionally made a change where
cpufreq_frequency_table_cpuinfo() isn't getting called anymore
for old policies getting re-initialized.

This leads to potentially invalid values of policy->max and
policy->cpuinfo_max_freq.

Fix the issue by reverting the original commit and adding the condition
for just the sorting function.

Fixes: 6db0f533d320 ("cpufreq: preserve freq_table_sorted across suspend/hibernate")
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Cc: 6.19+ <stable@vger.kernel.org> # 6.19+
Link: https://patch.msgid.link/65ba5c45749267c82e8a87af3dc788b37a0b3f48.1773998611.git.viresh.kumar@linaro.org
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/cpufreq/cpufreq.c
drivers/cpufreq/freq_table.c

index 277884d91913c84616104ce49c1960a4d3496680..1f794524a1d9234110b3cda659b024ff62499a52 100644 (file)
@@ -1427,12 +1427,9 @@ static int cpufreq_policy_online(struct cpufreq_policy *policy,
                 * If there is a problem with its frequency table, take it
                 * offline and drop it.
                 */
-               if (policy->freq_table_sorted != CPUFREQ_TABLE_SORTED_ASCENDING &&
-                   policy->freq_table_sorted != CPUFREQ_TABLE_SORTED_DESCENDING) {
-                       ret = cpufreq_table_validate_and_sort(policy);
-                       if (ret)
-                               goto out_offline_policy;
-               }
+               ret = cpufreq_table_validate_and_sort(policy);
+               if (ret)
+                       goto out_offline_policy;
 
                /* related_cpus should at least include policy->cpus. */
                cpumask_copy(policy->related_cpus, policy->cpus);
index 7f251daf03ce320bb599d204b058958f6326cf71..5b364d8da4f92794dc5b9a91c5b6557f89cfadec 100644 (file)
@@ -360,6 +360,10 @@ int cpufreq_table_validate_and_sort(struct cpufreq_policy *policy)
        if (policy_has_boost_freq(policy))
                policy->boost_supported = true;
 
+       if (policy->freq_table_sorted == CPUFREQ_TABLE_SORTED_ASCENDING ||
+           policy->freq_table_sorted == CPUFREQ_TABLE_SORTED_DESCENDING)
+               return 0;
+
        return set_freq_table_sorted(policy);
 }