| From 750ec3684fc7f78836d564054d130e856417bbd7 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 9 Jul 2025 18:41:45 +0800 |
| Subject: cpufreq: Exit governor when failed to start old governor |
| |
| From: Lifeng Zheng <zhenglifeng1@huawei.com> |
| |
| [ Upstream commit 0ae204405095abfbc2d694ee0fbb49bcbbe55c57 ] |
| |
| Detect the result of starting old governor in cpufreq_set_policy(). If it |
| fails, exit the governor and clear policy->governor. |
| |
| Signed-off-by: Lifeng Zheng <zhenglifeng1@huawei.com> |
| Link: https://patch.msgid.link/20250709104145.2348017-5-zhenglifeng1@huawei.com |
| Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/cpufreq/cpufreq.c | 8 +++++--- |
| 1 file changed, 5 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c |
| index 805b4d26e9d2..90bdccab1dff 100644 |
| --- a/drivers/cpufreq/cpufreq.c |
| +++ b/drivers/cpufreq/cpufreq.c |
| @@ -2649,10 +2649,12 @@ static int cpufreq_set_policy(struct cpufreq_policy *policy, |
| pr_debug("starting governor %s failed\n", policy->governor->name); |
| if (old_gov) { |
| policy->governor = old_gov; |
| - if (cpufreq_init_governor(policy)) |
| + if (cpufreq_init_governor(policy)) { |
| policy->governor = NULL; |
| - else |
| - cpufreq_start_governor(policy); |
| + } else if (cpufreq_start_governor(policy)) { |
| + cpufreq_exit_governor(policy); |
| + policy->governor = NULL; |
| + } |
| } |
| |
| return ret; |
| -- |
| 2.39.5 |
| |