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 | ||
