]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
cpufreq: Fix re-boost issue after hotplugging a CPU
authorLifeng Zheng <zhenglifeng1@huawei.com>
Fri, 17 Jan 2025 10:14:54 +0000 (18:14 +0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 23 Jan 2025 20:04:21 +0000 (21:04 +0100)
It turns out that CPUX will stay on the base frequency after performing
these operations:

 1. boost all CPUs: echo 1 > /sys/devices/system/cpu/cpufreq/boost

 2. offline one CPU: echo 0 > /sys/devices/system/cpu/cpuX/online

 3. deboost all CPUs: echo 0 > /sys/devices/system/cpu/cpufreq/boost

 4. online CPUX: echo 1 > /sys/devices/system/cpu/cpuX/online

 5. boost all CPUs again: echo 1 > /sys/devices/system/cpu/cpufreq/boost

This is because max_freq_req of the policy is not updated during the
online process, and the value of max_freq_req before the last offline is
retained.

When the CPU is boosted again, freq_qos_update_request() will do nothing
because the old value is the same as the new one. This causes the CPU to
stay at the base frequency. Updating max_freq_req  in cpufreq_online()
will solve this problem.

Signed-off-by: Lifeng Zheng <zhenglifeng1@huawei.com>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Link: https://patch.msgid.link/20250117101457.1530653-2-zhenglifeng1@huawei.com
[ rjw: Subject and changelog edits ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/cpufreq/cpufreq.c

index 1076e37a18ad0b3d59b1f9e41cbd5c570cb2f3d5..4d54e30f94ee1500049d3bd0f205059a76450f89 100644 (file)
@@ -1476,6 +1476,10 @@ static int cpufreq_online(unsigned int cpu)
 
                blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
                                CPUFREQ_CREATE_POLICY, policy);
+       } else {
+               ret = freq_qos_update_request(policy->max_freq_req, policy->max);
+               if (ret < 0)
+                       goto out_destroy_policy;
        }
 
        if (cpufreq_driver->get && has_target()) {