cpufreq: Fix policy initialization for internal governor drivers
Before commit1e4f63aecb
("cpufreq: Avoid creating excessively large stack frames") the initial value of the policy field in struct cpufreq_policy set by the driver's ->init() callback was implicitly passed from cpufreq_init_policy() to cpufreq_set_policy() if the default governor was neither "performance" nor "powersave". After that commit, however, cpufreq_init_policy() must take that case into consideration explicitly and handle it as appropriate, so make that happen. Fixes:1e4f63aecb
("cpufreq: Avoid creating excessively large stack frames") Link: https://lore.kernel.org/linux-pm/39fb762880c27da110086741315ca8b111d781cd.camel@gmail.com/ Reported-by: Artem Bityutskiy <dedekind1@gmail.com> Cc: 5.4+ <stable@vger.kernel.org> # 5.4+ Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
This commit is contained in:
Родитель
f8788d86ab
Коммит
f5739cb0b5
|
@ -1076,9 +1076,17 @@ static int cpufreq_init_policy(struct cpufreq_policy *policy)
|
||||||
pol = policy->last_policy;
|
pol = policy->last_policy;
|
||||||
} else if (def_gov) {
|
} else if (def_gov) {
|
||||||
pol = cpufreq_parse_policy(def_gov->name);
|
pol = cpufreq_parse_policy(def_gov->name);
|
||||||
} else {
|
/*
|
||||||
return -ENODATA;
|
* In case the default governor is neiter "performance"
|
||||||
|
* nor "powersave", fall back to the initial policy
|
||||||
|
* value set by the driver.
|
||||||
|
*/
|
||||||
|
if (pol == CPUFREQ_POLICY_UNKNOWN)
|
||||||
|
pol = policy->policy;
|
||||||
}
|
}
|
||||||
|
if (pol != CPUFREQ_POLICY_PERFORMANCE &&
|
||||||
|
pol != CPUFREQ_POLICY_POWERSAVE)
|
||||||
|
return -ENODATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
return cpufreq_set_policy(policy, gov, pol);
|
return cpufreq_set_policy(policy, gov, pol);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче