diff options
Diffstat (limited to 'drivers/cpufreq')
-rw-r--r-- | drivers/cpufreq/cpufreq.c | 20 |
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 | ||