]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
cpufreq: Initialize cpufreq-based frequency-invariance later
authorLifeng Zheng <zhenglifeng1@huawei.com>
Wed, 9 Jul 2025 10:41:42 +0000 (18:41 +0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 14 Jul 2025 17:38:10 +0000 (19:38 +0200)
The cpufreq-based invariance is enabled in cpufreq_register_driver(),
but never disabled after registration fails. Move the invariance
initialization to where all other initializations have been successfully
done to solve this problem.

Fixes: 874f63531064 ("cpufreq: report whether cpufreq supports Frequency Invariance (FI)")
Signed-off-by: Lifeng Zheng <zhenglifeng1@huawei.com>
Link: https://patch.msgid.link/20250709104145.2348017-2-zhenglifeng1@huawei.com
[ rjw: New subject ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/cpufreq/cpufreq.c

index 6ea39181e832221830110ba265e1c334ab4f9d9b..eb713d116c34ef67455926b0ff1f026691f2a569 100644 (file)
@@ -2940,15 +2940,6 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data)
        cpufreq_driver = driver_data;
        write_unlock_irqrestore(&cpufreq_driver_lock, flags);
 
-       /*
-        * Mark support for the scheduler's frequency invariance engine for
-        * drivers that implement target(), target_index() or fast_switch().
-        */
-       if (!cpufreq_driver->setpolicy) {
-               static_branch_enable_cpuslocked(&cpufreq_freq_invariance);
-               pr_debug("supports frequency invariance");
-       }
-
        if (driver_data->setpolicy)
                driver_data->flags |= CPUFREQ_CONST_LOOPS;
 
@@ -2979,6 +2970,15 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data)
        hp_online = ret;
        ret = 0;
 
+       /*
+        * Mark support for the scheduler's frequency invariance engine for
+        * drivers that implement target(), target_index() or fast_switch().
+        */
+       if (!cpufreq_driver->setpolicy) {
+               static_branch_enable_cpuslocked(&cpufreq_freq_invariance);
+               pr_debug("supports frequency invariance");
+       }
+
        pr_debug("driver %s up and running\n", driver_data->name);
        goto out;