|
@@ -976,10 +976,14 @@ static int cpufreq_init_policy(struct cpufreq_policy *policy)
|
|
|
|
|
|
new_policy.governor = gov;
|
|
new_policy.governor = gov;
|
|
|
|
|
|
- /* Use the default policy if its valid. */
|
|
|
|
- if (cpufreq_driver->setpolicy)
|
|
|
|
- cpufreq_parse_governor(gov->name, &new_policy.policy, NULL);
|
|
|
|
-
|
|
|
|
|
|
+ /* Use the default policy if there is no last_policy. */
|
|
|
|
+ if (cpufreq_driver->setpolicy) {
|
|
|
|
+ if (policy->last_policy)
|
|
|
|
+ new_policy.policy = policy->last_policy;
|
|
|
|
+ else
|
|
|
|
+ cpufreq_parse_governor(gov->name, &new_policy.policy,
|
|
|
|
+ NULL);
|
|
|
|
+ }
|
|
/* set default policy */
|
|
/* set default policy */
|
|
return cpufreq_set_policy(policy, &new_policy);
|
|
return cpufreq_set_policy(policy, &new_policy);
|
|
}
|
|
}
|
|
@@ -1330,6 +1334,8 @@ static void cpufreq_offline_prepare(unsigned int cpu)
|
|
if (has_target())
|
|
if (has_target())
|
|
strncpy(policy->last_governor, policy->governor->name,
|
|
strncpy(policy->last_governor, policy->governor->name,
|
|
CPUFREQ_NAME_LEN);
|
|
CPUFREQ_NAME_LEN);
|
|
|
|
+ else
|
|
|
|
+ policy->last_policy = policy->policy;
|
|
} else if (cpu == policy->cpu) {
|
|
} else if (cpu == policy->cpu) {
|
|
/* Nominate new CPU */
|
|
/* Nominate new CPU */
|
|
policy->cpu = cpumask_any(policy->cpus);
|
|
policy->cpu = cpumask_any(policy->cpus);
|