summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/cpufreq/cpufreq.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index 0d46b557c016..24e4ba568e77 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -1194,7 +1194,7 @@ static void cpufreq_policy_free(struct cpufreq_policy *policy, bool notify)
static int cpufreq_online(unsigned int cpu)
{
struct cpufreq_policy *policy;
- bool recover_policy;
+ bool new_policy;
unsigned long flags;
unsigned int j;
int ret;
@@ -1209,13 +1209,13 @@ static int cpufreq_online(unsigned int cpu)
return cpufreq_add_policy_cpu(policy, cpu);
/* This is the only online CPU for the policy. Start over. */
- recover_policy = true;
+ new_policy = false;
down_write(&policy->rwsem);
policy->cpu = cpu;
policy->governor = NULL;
up_write(&policy->rwsem);
} else {
- recover_policy = false;
+ new_policy = true;
policy = cpufreq_policy_alloc(cpu);
if (!policy)
return -ENOMEM;
@@ -1234,7 +1234,7 @@ static int cpufreq_online(unsigned int cpu)
down_write(&policy->rwsem);
- if (!recover_policy) {
+ if (new_policy) {
/* related_cpus should at least include policy->cpus. */
cpumask_or(policy->related_cpus, policy->related_cpus, policy->cpus);
/* Remember CPUs present at the policy creation time. */
@@ -1247,7 +1247,7 @@ static int cpufreq_online(unsigned int cpu)
*/
cpumask_and(policy->cpus, policy->cpus, cpu_online_mask);
- if (!recover_policy) {
+ if (new_policy) {
policy->user_policy.min = policy->min;
policy->user_policy.max = policy->max;
@@ -1308,7 +1308,7 @@ static int cpufreq_online(unsigned int cpu)
blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
CPUFREQ_START, policy);
- if (!recover_policy) {
+ if (new_policy) {
ret = cpufreq_add_dev_interface(policy);
if (ret)
goto out_exit_policy;
@@ -1324,10 +1324,12 @@ static int cpufreq_online(unsigned int cpu)
if (ret) {
pr_err("%s: Failed to initialize policy for cpu: %d (%d)\n",
__func__, cpu, ret);
- goto out_remove_policy_notify;
+ /* cpufreq_policy_free() will notify based on this */
+ new_policy = false;
+ goto out_exit_policy;
}
- if (!recover_policy) {
+ if (new_policy) {
policy->user_policy.policy = policy->policy;
policy->user_policy.governor = policy->governor;
}
@@ -1343,16 +1345,13 @@ static int cpufreq_online(unsigned int cpu)
return 0;
-out_remove_policy_notify:
- /* cpufreq_policy_free() will notify based on this */
- recover_policy = true;
out_exit_policy:
up_write(&policy->rwsem);
if (cpufreq_driver->exit)
cpufreq_driver->exit(policy);
out_free_policy:
- cpufreq_policy_free(policy, recover_policy);
+ cpufreq_policy_free(policy, !new_policy);
return ret;
}