|
@@ -1208,12 +1208,28 @@ static int __cpufreq_remove_dev(struct sys_device *sys_dev)
|
|
|
cpufreq_driver->exit(data);
|
|
|
unlock_policy_rwsem_write(cpu);
|
|
|
|
|
|
+ cpufreq_debug_enable_ratelimit();
|
|
|
+
|
|
|
+#ifdef CONFIG_HOTPLUG_CPU
|
|
|
+ /* when the CPU which is the parent of the kobj is hotplugged
|
|
|
+ * offline, check for siblings, and create cpufreq sysfs interface
|
|
|
+ * and symlinks
|
|
|
+ */
|
|
|
+ if (unlikely(cpumask_weight(data->cpus) > 1)) {
|
|
|
+ /* first sibling now owns the new sysfs dir */
|
|
|
+ cpumask_clear_cpu(cpu, data->cpus);
|
|
|
+ cpufreq_add_dev(get_cpu_sysdev(cpumask_first(data->cpus)));
|
|
|
+
|
|
|
+ /* finally remove our own symlink */
|
|
|
+ lock_policy_rwsem_write(cpu);
|
|
|
+ __cpufreq_remove_dev(sys_dev);
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
free_cpumask_var(data->related_cpus);
|
|
|
free_cpumask_var(data->cpus);
|
|
|
kfree(data);
|
|
|
- per_cpu(cpufreq_cpu_data, cpu) = NULL;
|
|
|
|
|
|
- cpufreq_debug_enable_ratelimit();
|
|
|
return 0;
|
|
|
}
|
|
|
|