@@ -1306,7 +1306,6 @@
init_waitqueue_head(&policy->transition_wait);
INIT_WORK(&policy->update, handle_update);
- policy->cpu = cpu;
return policy;
err_min_qos_notifier:
@@ -1394,17 +1393,18 @@
/* This is the only online CPU for the policy. Start over. */
new_policy = false;
- down_write(&policy->rwsem);
- policy->cpu = cpu;
- policy->governor = NULL;
} else {
new_policy = true;
policy = cpufreq_policy_alloc(cpu);
if (!policy)
return -ENOMEM;
- down_write(&policy->rwsem);
}
+ down_write(&policy->rwsem);
+
+ policy->cpu = cpu;
+ policy->governor = NULL;
+
if (!new_policy && cpufreq_driver->online) {
/* Recover policy->cpus using related_cpus */
cpumask_copy(policy->cpus, policy->related_cpus);