===================================================================
@@ -1016,6 +1016,9 @@ static int __cpufreq_remove_dev(struct d
pr_debug("%s: unregistering CPU %u\n", __func__, cpu);
+ if (!try_module_get(cpufreq_driver->owner))
+ return -EINVAL;
+
write_lock_irqsave(&cpufreq_driver_lock, flags);
data = per_cpu(cpufreq_cpu_data, cpu);
@@ -1025,7 +1028,8 @@ static int __cpufreq_remove_dev(struct d
if (!data) {
pr_debug("%s: No cpu_data found\n", __func__);
- return -EINVAL;
+ ret = -EINVAL;
+ goto err;
}
if (cpufreq_driver->target)
@@ -1063,9 +1067,9 @@ static int __cpufreq_remove_dev(struct d
unlock_policy_rwsem_write(cpu);
- ret = sysfs_create_link(&cpu_dev->kobj, &data->kobj,
+ sysfs_create_link(&cpu_dev->kobj, &data->kobj,
"cpufreq");
- return -EINVAL;
+ goto err;
}
WARN_ON(lock_policy_rwsem_write(cpu));
@@ -1110,6 +1114,10 @@ static int __cpufreq_remove_dev(struct d
per_cpu(cpufreq_policy_cpu, cpu) = -1;
return 0;
+
+ err:
+ module_put(cpufreq_driver->owner);
+ return ret;
}