aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/cpufreq
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/cpufreq')
-rw-r--r--drivers/cpufreq/cpufreq.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index a4ad7339588d..f0a5e2b0eb8a 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -1177,14 +1177,11 @@ static int __cpufreq_remove_dev(struct device *dev,
1177 __func__, cpu_dev->id, cpu); 1177 __func__, cpu_dev->id, cpu);
1178 } 1178 }
1179 1179
1180 if ((cpus == 1) && (cpufreq_driver->target))
1181 __cpufreq_governor(data, CPUFREQ_GOV_POLICY_EXIT);
1182
1183 pr_debug("%s: removing link, cpu: %d\n", __func__, cpu);
1184 cpufreq_cpu_put(data);
1185
1186 /* If cpu is last user of policy, free policy */ 1180 /* If cpu is last user of policy, free policy */
1187 if (cpus == 1) { 1181 if (cpus == 1) {
1182 if (cpufreq_driver->target)
1183 __cpufreq_governor(data, CPUFREQ_GOV_POLICY_EXIT);
1184
1188 lock_policy_rwsem_read(cpu); 1185 lock_policy_rwsem_read(cpu);
1189 kobj = &data->kobj; 1186 kobj = &data->kobj;
1190 cmp = &data->kobj_unregister; 1187 cmp = &data->kobj_unregister;
@@ -1205,9 +1202,13 @@ static int __cpufreq_remove_dev(struct device *dev,
1205 free_cpumask_var(data->related_cpus); 1202 free_cpumask_var(data->related_cpus);
1206 free_cpumask_var(data->cpus); 1203 free_cpumask_var(data->cpus);
1207 kfree(data); 1204 kfree(data);
1208 } else if (cpufreq_driver->target) { 1205 } else {
1209 __cpufreq_governor(data, CPUFREQ_GOV_START); 1206 pr_debug("%s: removing link, cpu: %d\n", __func__, cpu);
1210 __cpufreq_governor(data, CPUFREQ_GOV_LIMITS); 1207 cpufreq_cpu_put(data);
1208 if (cpufreq_driver->target) {
1209 __cpufreq_governor(data, CPUFREQ_GOV_START);
1210 __cpufreq_governor(data, CPUFREQ_GOV_LIMITS);
1211 }
1211 } 1212 }
1212 1213
1213 per_cpu(cpufreq_policy_cpu, cpu) = -1; 1214 per_cpu(cpufreq_policy_cpu, cpu) = -1;