|
@@ -584,12 +584,12 @@ out:
|
|
|
return i;
|
|
|
}
|
|
|
|
|
|
-static ssize_t show_cpus(cpumask_t mask, char *buf)
|
|
|
+static ssize_t show_cpus(const struct cpumask *mask, char *buf)
|
|
|
{
|
|
|
ssize_t i = 0;
|
|
|
unsigned int cpu;
|
|
|
|
|
|
- for_each_cpu_mask_nr(cpu, mask) {
|
|
|
+ for_each_cpu(cpu, mask) {
|
|
|
if (i)
|
|
|
i += scnprintf(&buf[i], (PAGE_SIZE - i - 2), " ");
|
|
|
i += scnprintf(&buf[i], (PAGE_SIZE - i - 2), "%u", cpu);
|
|
@@ -606,7 +606,7 @@ static ssize_t show_cpus(cpumask_t mask, char *buf)
|
|
|
*/
|
|
|
static ssize_t show_related_cpus(struct cpufreq_policy *policy, char *buf)
|
|
|
{
|
|
|
- if (cpus_empty(policy->related_cpus))
|
|
|
+ if (cpumask_empty(policy->related_cpus))
|
|
|
return show_cpus(policy->cpus, buf);
|
|
|
return show_cpus(policy->related_cpus, buf);
|
|
|
}
|
|
@@ -806,9 +806,20 @@ static int cpufreq_add_dev(struct sys_device *sys_dev)
|
|
|
ret = -ENOMEM;
|
|
|
goto nomem_out;
|
|
|
}
|
|
|
+ if (!alloc_cpumask_var(&policy->cpus, GFP_KERNEL)) {
|
|
|
+ kfree(policy);
|
|
|
+ ret = -ENOMEM;
|
|
|
+ goto nomem_out;
|
|
|
+ }
|
|
|
+ if (!alloc_cpumask_var(&policy->related_cpus, GFP_KERNEL)) {
|
|
|
+ free_cpumask_var(policy->cpus);
|
|
|
+ kfree(policy);
|
|
|
+ ret = -ENOMEM;
|
|
|
+ goto nomem_out;
|
|
|
+ }
|
|
|
|
|
|
policy->cpu = cpu;
|
|
|
- policy->cpus = cpumask_of_cpu(cpu);
|
|
|
+ cpumask_copy(policy->cpus, cpumask_of(cpu));
|
|
|
|
|
|
/* Initially set CPU itself as the policy_cpu */
|
|
|
per_cpu(policy_cpu, cpu) = cpu;
|
|
@@ -843,7 +854,7 @@ static int cpufreq_add_dev(struct sys_device *sys_dev)
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
- for_each_cpu_mask_nr(j, policy->cpus) {
|
|
|
+ for_each_cpu(j, policy->cpus) {
|
|
|
if (cpu == j)
|
|
|
continue;
|
|
|
|
|
@@ -861,7 +872,7 @@ static int cpufreq_add_dev(struct sys_device *sys_dev)
|
|
|
goto err_out_driver_exit;
|
|
|
|
|
|
spin_lock_irqsave(&cpufreq_driver_lock, flags);
|
|
|
- managed_policy->cpus = policy->cpus;
|
|
|
+ cpumask_copy(managed_policy->cpus, policy->cpus);
|
|
|
per_cpu(cpufreq_cpu_data, cpu) = managed_policy;
|
|
|
spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
|
|
|
|
|
@@ -916,14 +927,14 @@ static int cpufreq_add_dev(struct sys_device *sys_dev)
|
|
|
}
|
|
|
|
|
|
spin_lock_irqsave(&cpufreq_driver_lock, flags);
|
|
|
- for_each_cpu_mask_nr(j, policy->cpus) {
|
|
|
+ for_each_cpu(j, policy->cpus) {
|
|
|
per_cpu(cpufreq_cpu_data, j) = policy;
|
|
|
per_cpu(policy_cpu, j) = policy->cpu;
|
|
|
}
|
|
|
spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
|
|
|
|
|
|
/* symlink affected CPUs */
|
|
|
- for_each_cpu_mask_nr(j, policy->cpus) {
|
|
|
+ for_each_cpu(j, policy->cpus) {
|
|
|
if (j == cpu)
|
|
|
continue;
|
|
|
if (!cpu_online(j))
|
|
@@ -963,7 +974,7 @@ static int cpufreq_add_dev(struct sys_device *sys_dev)
|
|
|
|
|
|
err_out_unregister:
|
|
|
spin_lock_irqsave(&cpufreq_driver_lock, flags);
|
|
|
- for_each_cpu_mask_nr(j, policy->cpus)
|
|
|
+ for_each_cpu(j, policy->cpus)
|
|
|
per_cpu(cpufreq_cpu_data, j) = NULL;
|
|
|
spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
|
|
|
|
|
@@ -1024,7 +1035,7 @@ static int __cpufreq_remove_dev(struct sys_device *sys_dev)
|
|
|
*/
|
|
|
if (unlikely(cpu != data->cpu)) {
|
|
|
dprintk("removing link\n");
|
|
|
- cpu_clear(cpu, data->cpus);
|
|
|
+ cpumask_clear_cpu(cpu, data->cpus);
|
|
|
spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
|
|
|
sysfs_remove_link(&sys_dev->kobj, "cpufreq");
|
|
|
cpufreq_cpu_put(data);
|
|
@@ -1045,8 +1056,8 @@ static int __cpufreq_remove_dev(struct sys_device *sys_dev)
|
|
|
* per_cpu(cpufreq_cpu_data) while holding the lock, and remove
|
|
|
* the sysfs links afterwards.
|
|
|
*/
|
|
|
- if (unlikely(cpus_weight(data->cpus) > 1)) {
|
|
|
- for_each_cpu_mask_nr(j, data->cpus) {
|
|
|
+ if (unlikely(cpumask_weight(data->cpus) > 1)) {
|
|
|
+ for_each_cpu(j, data->cpus) {
|
|
|
if (j == cpu)
|
|
|
continue;
|
|
|
per_cpu(cpufreq_cpu_data, j) = NULL;
|
|
@@ -1055,8 +1066,8 @@ static int __cpufreq_remove_dev(struct sys_device *sys_dev)
|
|
|
|
|
|
spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
|
|
|
|
|
|
- if (unlikely(cpus_weight(data->cpus) > 1)) {
|
|
|
- for_each_cpu_mask_nr(j, data->cpus) {
|
|
|
+ if (unlikely(cpumask_weight(data->cpus) > 1)) {
|
|
|
+ for_each_cpu(j, data->cpus) {
|
|
|
if (j == cpu)
|
|
|
continue;
|
|
|
dprintk("removing link for cpu %u\n", j);
|
|
@@ -1090,7 +1101,10 @@ static int __cpufreq_remove_dev(struct sys_device *sys_dev)
|
|
|
if (cpufreq_driver->exit)
|
|
|
cpufreq_driver->exit(data);
|
|
|
|
|
|
+ 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;
|