|
@@ -41,7 +41,7 @@ static struct cpufreq_driver *cpufreq_driver;
|
|
static DEFINE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_data);
|
|
static DEFINE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_data);
|
|
#ifdef CONFIG_HOTPLUG_CPU
|
|
#ifdef CONFIG_HOTPLUG_CPU
|
|
/* This one keeps track of the previously set governor of a removed CPU */
|
|
/* This one keeps track of the previously set governor of a removed CPU */
|
|
-static DEFINE_PER_CPU(struct cpufreq_governor *, cpufreq_cpu_governor);
|
|
|
|
|
|
+static DEFINE_PER_CPU(char[CPUFREQ_NAME_LEN], cpufreq_cpu_governor);
|
|
#endif
|
|
#endif
|
|
static DEFINE_SPINLOCK(cpufreq_driver_lock);
|
|
static DEFINE_SPINLOCK(cpufreq_driver_lock);
|
|
|
|
|
|
@@ -774,10 +774,12 @@ int cpufreq_add_dev_policy(unsigned int cpu, struct cpufreq_policy *policy,
|
|
#ifdef CONFIG_SMP
|
|
#ifdef CONFIG_SMP
|
|
unsigned long flags;
|
|
unsigned long flags;
|
|
unsigned int j;
|
|
unsigned int j;
|
|
-
|
|
|
|
#ifdef CONFIG_HOTPLUG_CPU
|
|
#ifdef CONFIG_HOTPLUG_CPU
|
|
- if (per_cpu(cpufreq_cpu_governor, cpu)) {
|
|
|
|
- policy->governor = per_cpu(cpufreq_cpu_governor, cpu);
|
|
|
|
|
|
+ struct cpufreq_governor *gov;
|
|
|
|
+
|
|
|
|
+ gov = __find_governor(per_cpu(cpufreq_cpu_governor, cpu));
|
|
|
|
+ if (gov) {
|
|
|
|
+ policy->governor = gov;
|
|
dprintk("Restoring governor %s for cpu %d\n",
|
|
dprintk("Restoring governor %s for cpu %d\n",
|
|
policy->governor->name, cpu);
|
|
policy->governor->name, cpu);
|
|
}
|
|
}
|
|
@@ -1111,7 +1113,8 @@ static int __cpufreq_remove_dev(struct sys_device *sys_dev)
|
|
#ifdef CONFIG_SMP
|
|
#ifdef CONFIG_SMP
|
|
|
|
|
|
#ifdef CONFIG_HOTPLUG_CPU
|
|
#ifdef CONFIG_HOTPLUG_CPU
|
|
- per_cpu(cpufreq_cpu_governor, cpu) = data->governor;
|
|
|
|
|
|
+ strncpy(per_cpu(cpufreq_cpu_governor, cpu), data->governor->name,
|
|
|
|
+ CPUFREQ_NAME_LEN);
|
|
#endif
|
|
#endif
|
|
|
|
|
|
/* if we have other CPUs still registered, we need to unlink them,
|
|
/* if we have other CPUs still registered, we need to unlink them,
|
|
@@ -1135,7 +1138,8 @@ static int __cpufreq_remove_dev(struct sys_device *sys_dev)
|
|
continue;
|
|
continue;
|
|
dprintk("removing link for cpu %u\n", j);
|
|
dprintk("removing link for cpu %u\n", j);
|
|
#ifdef CONFIG_HOTPLUG_CPU
|
|
#ifdef CONFIG_HOTPLUG_CPU
|
|
- per_cpu(cpufreq_cpu_governor, j) = data->governor;
|
|
|
|
|
|
+ strncpy(per_cpu(cpufreq_cpu_governor, j),
|
|
|
|
+ data->governor->name, CPUFREQ_NAME_LEN);
|
|
#endif
|
|
#endif
|
|
cpu_sys_dev = get_cpu_sysdev(j);
|
|
cpu_sys_dev = get_cpu_sysdev(j);
|
|
sysfs_remove_link(&cpu_sys_dev->kobj, "cpufreq");
|
|
sysfs_remove_link(&cpu_sys_dev->kobj, "cpufreq");
|