aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/cpufreq/cpufreq.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index 2dafc5c38ae7..7c10f96c5ae9 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -1208,12 +1208,28 @@ static int __cpufreq_remove_dev(struct sys_device *sys_dev)
1208 cpufreq_driver->exit(data); 1208 cpufreq_driver->exit(data);
1209 unlock_policy_rwsem_write(cpu); 1209 unlock_policy_rwsem_write(cpu);
1210 1210
1211 cpufreq_debug_enable_ratelimit();
1212
1213#ifdef CONFIG_HOTPLUG_CPU
1214 /* when the CPU which is the parent of the kobj is hotplugged
1215 * offline, check for siblings, and create cpufreq sysfs interface
1216 * and symlinks
1217 */
1218 if (unlikely(cpumask_weight(data->cpus) > 1)) {
1219 /* first sibling now owns the new sysfs dir */
1220 cpumask_clear_cpu(cpu, data->cpus);
1221 cpufreq_add_dev(get_cpu_sysdev(cpumask_first(data->cpus)));
1222
1223 /* finally remove our own symlink */
1224 lock_policy_rwsem_write(cpu);
1225 __cpufreq_remove_dev(sys_dev);
1226 }
1227#endif
1228
1211 free_cpumask_var(data->related_cpus); 1229 free_cpumask_var(data->related_cpus);
1212 free_cpumask_var(data->cpus); 1230 free_cpumask_var(data->cpus);
1213 kfree(data); 1231 kfree(data);
1214 per_cpu(cpufreq_cpu_data, cpu) = NULL;
1215 1232
1216 cpufreq_debug_enable_ratelimit();
1217 return 0; 1233 return 0;
1218} 1234}
1219 1235