diff options
| author | Rusty Russell <rusty@rustcorp.com.au> | 2009-01-04 08:18:06 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-01-06 03:05:31 -0500 |
| commit | 835481d9bcd65720b473db6b38746a74a3964218 (patch) | |
| tree | a6f0fa205542cf73a980a2f8e41d5e908a33b6d6 | |
| parent | 5cb0535f1713b51610f2881b17d0fe3656114364 (diff) | |
cpumask: convert struct cpufreq_policy to cpumask_var_t
Impact: use new cpumask API to reduce memory usage
This is part of an effort to reduce structure sizes for machines
configured with large NR_CPUS. cpumask_t gets replaced by
cpumask_var_t, which is either struct cpumask[1] (small NR_CPUS) or
struct cpumask * (large NR_CPUS).
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Mike Travis <travis@sgi.com>
Acked-by: Dave Jones <davej@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
| -rw-r--r-- | arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | 10 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/cpufreq/p4-clockmod.c | 8 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/cpufreq/powernow-k8.c | 6 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/cpufreq/powernow-k8.h | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/cpufreq/speedstep-centrino.c | 14 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/cpufreq/speedstep-ich.c | 18 | ||||
| -rw-r--r-- | drivers/cpufreq/cpufreq.c | 42 | ||||
| -rw-r--r-- | drivers/cpufreq/cpufreq_conservative.c | 2 | ||||
| -rw-r--r-- | drivers/cpufreq/cpufreq_ondemand.c | 4 | ||||
| -rw-r--r-- | include/linux/cpufreq.h | 4 |
10 files changed, 62 insertions, 48 deletions
diff --git a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c index 28102ad1a363..0b31939862d6 100644 --- a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c +++ b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | |||
| @@ -411,7 +411,7 @@ static int acpi_cpufreq_target(struct cpufreq_policy *policy, | |||
| 411 | 411 | ||
| 412 | #ifdef CONFIG_HOTPLUG_CPU | 412 | #ifdef CONFIG_HOTPLUG_CPU |
| 413 | /* cpufreq holds the hotplug lock, so we are safe from here on */ | 413 | /* cpufreq holds the hotplug lock, so we are safe from here on */ |
| 414 | cpus_and(online_policy_cpus, cpu_online_map, policy->cpus); | 414 | cpumask_and(&online_policy_cpus, cpu_online_mask, policy->cpus); |
| 415 | #else | 415 | #else |
| 416 | online_policy_cpus = policy->cpus; | 416 | online_policy_cpus = policy->cpus; |
| 417 | #endif | 417 | #endif |
| @@ -626,15 +626,15 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) | |||
| 626 | */ | 626 | */ |
| 627 | if (policy->shared_type == CPUFREQ_SHARED_TYPE_ALL || | 627 | if (policy->shared_type == CPUFREQ_SHARED_TYPE_ALL || |
| 628 | policy->shared_type == CPUFREQ_SHARED_TYPE_ANY) { | 628 | policy->shared_type == CPUFREQ_SHARED_TYPE_ANY) { |
| 629 | cpumask_copy(&policy->cpus, perf->shared_cpu_map); | 629 | cpumask_copy(policy->cpus, perf->shared_cpu_map); |
| 630 | } | 630 | } |
| 631 | cpumask_copy(&policy->related_cpus, perf->shared_cpu_map); | 631 | cpumask_copy(policy->related_cpus, perf->shared_cpu_map); |
| 632 | 632 | ||
| 633 | #ifdef CONFIG_SMP | 633 | #ifdef CONFIG_SMP |
| 634 | dmi_check_system(sw_any_bug_dmi_table); | 634 | dmi_check_system(sw_any_bug_dmi_table); |
| 635 | if (bios_with_sw_any_bug && cpus_weight(policy->cpus) == 1) { | 635 | if (bios_with_sw_any_bug && cpumask_weight(policy->cpus) == 1) { |
| 636 | policy->shared_type = CPUFREQ_SHARED_TYPE_ALL; | 636 | policy->shared_type = CPUFREQ_SHARED_TYPE_ALL; |
| 637 | policy->cpus = per_cpu(cpu_core_map, cpu); | 637 | cpumask_copy(policy->cpus, cpu_core_mask(cpu)); |
| 638 | } | 638 | } |
| 639 | #endif | 639 | #endif |
| 640 | 640 | ||
diff --git a/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c b/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c index beea4466b063..b585e04cbc9e 100644 --- a/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c +++ b/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c | |||
| @@ -122,7 +122,7 @@ static int cpufreq_p4_target(struct cpufreq_policy *policy, | |||
| 122 | return 0; | 122 | return 0; |
| 123 | 123 | ||
| 124 | /* notifiers */ | 124 | /* notifiers */ |
| 125 | for_each_cpu_mask_nr(i, policy->cpus) { | 125 | for_each_cpu(i, policy->cpus) { |
| 126 | freqs.cpu = i; | 126 | freqs.cpu = i; |
| 127 | cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); | 127 | cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); |
| 128 | } | 128 | } |
| @@ -130,11 +130,11 @@ static int cpufreq_p4_target(struct cpufreq_policy *policy, | |||
| 130 | /* run on each logical CPU, see section 13.15.3 of IA32 Intel Architecture Software | 130 | /* run on each logical CPU, see section 13.15.3 of IA32 Intel Architecture Software |
| 131 | * Developer's Manual, Volume 3 | 131 | * Developer's Manual, Volume 3 |
| 132 | */ | 132 | */ |
| 133 | for_each_cpu_mask_nr(i, policy->cpus) | 133 | for_each_cpu(i, policy->cpus) |
| 134 | cpufreq_p4_setdc(i, p4clockmod_table[newstate].index); | 134 | cpufreq_p4_setdc(i, p4clockmod_table[newstate].index); |
| 135 | 135 | ||
| 136 | /* notifiers */ | 136 | /* notifiers */ |
| 137 | for_each_cpu_mask_nr(i, policy->cpus) { | 137 | for_each_cpu(i, policy->cpus) { |
| 138 | freqs.cpu = i; | 138 | freqs.cpu = i; |
| 139 | cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); | 139 | cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); |
| 140 | } | 140 | } |
| @@ -203,7 +203,7 @@ static int cpufreq_p4_cpu_init(struct cpufreq_policy *policy) | |||
| 203 | unsigned int i; | 203 | unsigned int i; |
| 204 | 204 | ||
| 205 | #ifdef CONFIG_SMP | 205 | #ifdef CONFIG_SMP |
| 206 | policy->cpus = per_cpu(cpu_sibling_map, policy->cpu); | 206 | cpumask_copy(policy->cpus, &per_cpu(cpu_sibling_map, policy->cpu)); |
| 207 | #endif | 207 | #endif |
| 208 | 208 | ||
| 209 | /* Errata workaround */ | 209 | /* Errata workaround */ |
diff --git a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c index c3c9adbaa26f..5c28b37dea11 100644 --- a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c +++ b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c | |||
| @@ -1199,10 +1199,10 @@ static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol) | |||
| 1199 | set_cpus_allowed_ptr(current, &oldmask); | 1199 | set_cpus_allowed_ptr(current, &oldmask); |
| 1200 | 1200 | ||
| 1201 | if (cpu_family == CPU_HW_PSTATE) | 1201 | if (cpu_family == CPU_HW_PSTATE) |
| 1202 | pol->cpus = cpumask_of_cpu(pol->cpu); | 1202 | cpumask_copy(pol->cpus, cpumask_of(pol->cpu)); |
| 1203 | else | 1203 | else |
| 1204 | pol->cpus = per_cpu(cpu_core_map, pol->cpu); | 1204 | cpumask_copy(pol->cpus, &per_cpu(cpu_core_map, pol->cpu)); |
| 1205 | data->available_cores = &(pol->cpus); | 1205 | data->available_cores = pol->cpus; |
| 1206 | 1206 | ||
| 1207 | /* Take a crude guess here. | 1207 | /* Take a crude guess here. |
| 1208 | * That guess was in microseconds, so multiply with 1000 */ | 1208 | * That guess was in microseconds, so multiply with 1000 */ |
diff --git a/arch/x86/kernel/cpu/cpufreq/powernow-k8.h b/arch/x86/kernel/cpu/cpufreq/powernow-k8.h index 65cfb5d7f77f..8ecc75b6c7c3 100644 --- a/arch/x86/kernel/cpu/cpufreq/powernow-k8.h +++ b/arch/x86/kernel/cpu/cpufreq/powernow-k8.h | |||
| @@ -53,7 +53,7 @@ struct powernow_k8_data { | |||
| 53 | /* we need to keep track of associated cores, but let cpufreq | 53 | /* we need to keep track of associated cores, but let cpufreq |
| 54 | * handle hotplug events - so just point at cpufreq pol->cpus | 54 | * handle hotplug events - so just point at cpufreq pol->cpus |
| 55 | * structure */ | 55 | * structure */ |
| 56 | cpumask_t *available_cores; | 56 | struct cpumask *available_cores; |
| 57 | }; | 57 | }; |
| 58 | 58 | ||
| 59 | 59 | ||
diff --git a/arch/x86/kernel/cpu/cpufreq/speedstep-centrino.c b/arch/x86/kernel/cpu/cpufreq/speedstep-centrino.c index d2cc4991cbaa..f08998278a3a 100644 --- a/arch/x86/kernel/cpu/cpufreq/speedstep-centrino.c +++ b/arch/x86/kernel/cpu/cpufreq/speedstep-centrino.c | |||
| @@ -492,8 +492,8 @@ static int centrino_target (struct cpufreq_policy *policy, | |||
| 492 | } | 492 | } |
| 493 | 493 | ||
| 494 | first_cpu = 1; | 494 | first_cpu = 1; |
| 495 | for_each_cpu_mask_nr(j, policy->cpus) { | 495 | for_each_cpu(j, policy->cpus) { |
| 496 | const cpumask_t *mask; | 496 | const struct cpumask *mask; |
| 497 | 497 | ||
| 498 | /* cpufreq holds the hotplug lock, so we are safe here */ | 498 | /* cpufreq holds the hotplug lock, so we are safe here */ |
| 499 | if (!cpu_online(j)) | 499 | if (!cpu_online(j)) |
| @@ -504,9 +504,9 @@ static int centrino_target (struct cpufreq_policy *policy, | |||
| 504 | * Make sure we are running on CPU that wants to change freq | 504 | * Make sure we are running on CPU that wants to change freq |
| 505 | */ | 505 | */ |
| 506 | if (policy->shared_type == CPUFREQ_SHARED_TYPE_ANY) | 506 | if (policy->shared_type == CPUFREQ_SHARED_TYPE_ANY) |
| 507 | mask = &policy->cpus; | 507 | mask = policy->cpus; |
| 508 | else | 508 | else |
| 509 | mask = &cpumask_of_cpu(j); | 509 | mask = cpumask_of(j); |
| 510 | 510 | ||
| 511 | set_cpus_allowed_ptr(current, mask); | 511 | set_cpus_allowed_ptr(current, mask); |
| 512 | preempt_disable(); | 512 | preempt_disable(); |
| @@ -538,7 +538,7 @@ static int centrino_target (struct cpufreq_policy *policy, | |||
| 538 | dprintk("target=%dkHz old=%d new=%d msr=%04x\n", | 538 | dprintk("target=%dkHz old=%d new=%d msr=%04x\n", |
| 539 | target_freq, freqs.old, freqs.new, msr); | 539 | target_freq, freqs.old, freqs.new, msr); |
| 540 | 540 | ||
| 541 | for_each_cpu_mask_nr(k, policy->cpus) { | 541 | for_each_cpu(k, policy->cpus) { |
| 542 | if (!cpu_online(k)) | 542 | if (!cpu_online(k)) |
| 543 | continue; | 543 | continue; |
| 544 | freqs.cpu = k; | 544 | freqs.cpu = k; |
| @@ -563,7 +563,7 @@ static int centrino_target (struct cpufreq_policy *policy, | |||
| 563 | preempt_enable(); | 563 | preempt_enable(); |
| 564 | } | 564 | } |
| 565 | 565 | ||
| 566 | for_each_cpu_mask_nr(k, policy->cpus) { | 566 | for_each_cpu(k, policy->cpus) { |
| 567 | if (!cpu_online(k)) | 567 | if (!cpu_online(k)) |
| 568 | continue; | 568 | continue; |
| 569 | freqs.cpu = k; | 569 | freqs.cpu = k; |
| @@ -586,7 +586,7 @@ static int centrino_target (struct cpufreq_policy *policy, | |||
| 586 | tmp = freqs.new; | 586 | tmp = freqs.new; |
| 587 | freqs.new = freqs.old; | 587 | freqs.new = freqs.old; |
| 588 | freqs.old = tmp; | 588 | freqs.old = tmp; |
| 589 | for_each_cpu_mask_nr(j, policy->cpus) { | 589 | for_each_cpu(j, policy->cpus) { |
| 590 | if (!cpu_online(j)) | 590 | if (!cpu_online(j)) |
| 591 | continue; | 591 | continue; |
| 592 | cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); | 592 | cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); |
diff --git a/arch/x86/kernel/cpu/cpufreq/speedstep-ich.c b/arch/x86/kernel/cpu/cpufreq/speedstep-ich.c index 04d0376b64b0..dedc1e98f168 100644 --- a/arch/x86/kernel/cpu/cpufreq/speedstep-ich.c +++ b/arch/x86/kernel/cpu/cpufreq/speedstep-ich.c | |||
| @@ -229,7 +229,7 @@ static unsigned int speedstep_detect_chipset (void) | |||
| 229 | return 0; | 229 | return 0; |
| 230 | } | 230 | } |
| 231 | 231 | ||
| 232 | static unsigned int _speedstep_get(const cpumask_t *cpus) | 232 | static unsigned int _speedstep_get(const struct cpumask *cpus) |
| 233 | { | 233 | { |
| 234 | unsigned int speed; | 234 | unsigned int speed; |
| 235 | cpumask_t cpus_allowed; | 235 | cpumask_t cpus_allowed; |
| @@ -244,7 +244,7 @@ static unsigned int _speedstep_get(const cpumask_t *cpus) | |||
| 244 | 244 | ||
| 245 | static unsigned int speedstep_get(unsigned int cpu) | 245 | static unsigned int speedstep_get(unsigned int cpu) |
| 246 | { | 246 | { |
| 247 | return _speedstep_get(&cpumask_of_cpu(cpu)); | 247 | return _speedstep_get(cpumask_of(cpu)); |
| 248 | } | 248 | } |
| 249 | 249 | ||
| 250 | /** | 250 | /** |
| @@ -267,7 +267,7 @@ static int speedstep_target (struct cpufreq_policy *policy, | |||
| 267 | if (cpufreq_frequency_table_target(policy, &speedstep_freqs[0], target_freq, relation, &newstate)) | 267 | if (cpufreq_frequency_table_target(policy, &speedstep_freqs[0], target_freq, relation, &newstate)) |
| 268 | return -EINVAL; | 268 | return -EINVAL; |
| 269 | 269 | ||
| 270 | freqs.old = _speedstep_get(&policy->cpus); | 270 | freqs.old = _speedstep_get(policy->cpus); |
| 271 | freqs.new = speedstep_freqs[newstate].frequency; | 271 | freqs.new = speedstep_freqs[newstate].frequency; |
| 272 | freqs.cpu = policy->cpu; | 272 | freqs.cpu = policy->cpu; |
| 273 | 273 | ||
| @@ -279,20 +279,20 @@ static int speedstep_target (struct cpufreq_policy *policy, | |||
| 279 | 279 | ||
| 280 | cpus_allowed = current->cpus_allowed; | 280 | cpus_allowed = current->cpus_allowed; |
| 281 | 281 | ||
| 282 | for_each_cpu_mask_nr(i, policy->cpus) { | 282 | for_each_cpu(i, policy->cpus) { |
| 283 | freqs.cpu = i; | 283 | freqs.cpu = i; |
| 284 | cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); | 284 | cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); |
| 285 | } | 285 | } |
| 286 | 286 | ||
| 287 | /* switch to physical CPU where state is to be changed */ | 287 | /* switch to physical CPU where state is to be changed */ |
| 288 | set_cpus_allowed_ptr(current, &policy->cpus); | 288 | set_cpus_allowed_ptr(current, policy->cpus); |
| 289 | 289 | ||
| 290 | speedstep_set_state(newstate); | 290 | speedstep_set_state(newstate); |
| 291 | 291 | ||
| 292 | /* allow to be run on all CPUs */ | 292 | /* allow to be run on all CPUs */ |
| 293 | set_cpus_allowed_ptr(current, &cpus_allowed); | 293 | set_cpus_allowed_ptr(current, &cpus_allowed); |
| 294 | 294 | ||
| 295 | for_each_cpu_mask_nr(i, policy->cpus) { | 295 | for_each_cpu(i, policy->cpus) { |
| 296 | freqs.cpu = i; | 296 | freqs.cpu = i; |
| 297 | cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); | 297 | cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); |
| 298 | } | 298 | } |
| @@ -322,11 +322,11 @@ static int speedstep_cpu_init(struct cpufreq_policy *policy) | |||
| 322 | 322 | ||
| 323 | /* only run on CPU to be set, or on its sibling */ | 323 | /* only run on CPU to be set, or on its sibling */ |
| 324 | #ifdef CONFIG_SMP | 324 | #ifdef CONFIG_SMP |
| 325 | policy->cpus = per_cpu(cpu_sibling_map, policy->cpu); | 325 | cpumask_copy(policy->cpus, &per_cpu(cpu_sibling_map, policy->cpu)); |
| 326 | #endif | 326 | #endif |
| 327 | 327 | ||
| 328 | cpus_allowed = current->cpus_allowed; | 328 | cpus_allowed = current->cpus_allowed; |
| 329 | set_cpus_allowed_ptr(current, &policy->cpus); | 329 | set_cpus_allowed_ptr(current, policy->cpus); |
| 330 | 330 | ||
| 331 | /* detect low and high frequency and transition latency */ | 331 | /* detect low and high frequency and transition latency */ |
| 332 | result = speedstep_get_freqs(speedstep_processor, | 332 | result = speedstep_get_freqs(speedstep_processor, |
| @@ -339,7 +339,7 @@ static int speedstep_cpu_init(struct cpufreq_policy *policy) | |||
| 339 | return result; | 339 | return result; |
| 340 | 340 | ||
| 341 | /* get current speed setting */ | 341 | /* get current speed setting */ |
| 342 | speed = _speedstep_get(&policy->cpus); | 342 | speed = _speedstep_get(policy->cpus); |
| 343 | if (!speed) | 343 | if (!speed) |
| 344 | return -EIO; | 344 | return -EIO; |
| 345 | 345 | ||
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index 01dde80597f7..b55cb67435bd 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c | |||
| @@ -584,12 +584,12 @@ out: | |||
| 584 | return i; | 584 | return i; |
| 585 | } | 585 | } |
| 586 | 586 | ||
| 587 | static ssize_t show_cpus(cpumask_t mask, char *buf) | 587 | static ssize_t show_cpus(const struct cpumask *mask, char *buf) |
| 588 | { | 588 | { |
| 589 | ssize_t i = 0; | 589 | ssize_t i = 0; |
| 590 | unsigned int cpu; | 590 | unsigned int cpu; |
| 591 | 591 | ||
| 592 | for_each_cpu_mask_nr(cpu, mask) { | 592 | for_each_cpu(cpu, mask) { |
| 593 | if (i) | 593 | if (i) |
| 594 | i += scnprintf(&buf[i], (PAGE_SIZE - i - 2), " "); | 594 | i += scnprintf(&buf[i], (PAGE_SIZE - i - 2), " "); |
| 595 | i += scnprintf(&buf[i], (PAGE_SIZE - i - 2), "%u", cpu); | 595 | i += scnprintf(&buf[i], (PAGE_SIZE - i - 2), "%u", cpu); |
| @@ -606,7 +606,7 @@ static ssize_t show_cpus(cpumask_t mask, char *buf) | |||
| 606 | */ | 606 | */ |
| 607 | static ssize_t show_related_cpus(struct cpufreq_policy *policy, char *buf) | 607 | static ssize_t show_related_cpus(struct cpufreq_policy *policy, char *buf) |
| 608 | { | 608 | { |
| 609 | if (cpus_empty(policy->related_cpus)) | 609 | if (cpumask_empty(policy->related_cpus)) |
| 610 | return show_cpus(policy->cpus, buf); | 610 | return show_cpus(policy->cpus, buf); |
| 611 | return show_cpus(policy->related_cpus, buf); | 611 | return show_cpus(policy->related_cpus, buf); |
| 612 | } | 612 | } |
| @@ -806,9 +806,20 @@ static int cpufreq_add_dev(struct sys_device *sys_dev) | |||
| 806 | ret = -ENOMEM; | 806 | ret = -ENOMEM; |
| 807 | goto nomem_out; | 807 | goto nomem_out; |
| 808 | } | 808 | } |
| 809 | if (!alloc_cpumask_var(&policy->cpus, GFP_KERNEL)) { | ||
| 810 | kfree(policy); | ||
| 811 | ret = -ENOMEM; | ||
| 812 | goto nomem_out; | ||
| 813 | } | ||
| 814 | if (!alloc_cpumask_var(&policy->related_cpus, GFP_KERNEL)) { | ||
| 815 | free_cpumask_var(policy->cpus); | ||
| 816 | kfree(policy); | ||
| 817 | ret = -ENOMEM; | ||
| 818 | goto nomem_out; | ||
| 819 | } | ||
| 809 | 820 | ||
| 810 | policy->cpu = cpu; | 821 | policy->cpu = cpu; |
| 811 | policy->cpus = cpumask_of_cpu(cpu); | 822 | cpumask_copy(policy->cpus, cpumask_of(cpu)); |
| 812 | 823 | ||
| 813 | /* Initially set CPU itself as the policy_cpu */ | 824 | /* Initially set CPU itself as the policy_cpu */ |
| 814 | per_cpu(policy_cpu, cpu) = cpu; | 825 | per_cpu(policy_cpu, cpu) = cpu; |
| @@ -843,7 +854,7 @@ static int cpufreq_add_dev(struct sys_device *sys_dev) | |||
| 843 | } | 854 | } |
| 844 | #endif | 855 | #endif |
| 845 | 856 | ||
| 846 | for_each_cpu_mask_nr(j, policy->cpus) { | 857 | for_each_cpu(j, policy->cpus) { |
| 847 | if (cpu == j) | 858 | if (cpu == j) |
| 848 | continue; | 859 | continue; |
| 849 | 860 | ||
| @@ -861,7 +872,7 @@ static int cpufreq_add_dev(struct sys_device *sys_dev) | |||
| 861 | goto err_out_driver_exit; | 872 | goto err_out_driver_exit; |
| 862 | 873 | ||
| 863 | spin_lock_irqsave(&cpufreq_driver_lock, flags); | 874 | spin_lock_irqsave(&cpufreq_driver_lock, flags); |
| 864 | managed_policy->cpus = policy->cpus; | 875 | cpumask_copy(managed_policy->cpus, policy->cpus); |
| 865 | per_cpu(cpufreq_cpu_data, cpu) = managed_policy; | 876 | per_cpu(cpufreq_cpu_data, cpu) = managed_policy; |
| 866 | spin_unlock_irqrestore(&cpufreq_driver_lock, flags); | 877 | spin_unlock_irqrestore(&cpufreq_driver_lock, flags); |
| 867 | 878 | ||
| @@ -916,14 +927,14 @@ static int cpufreq_add_dev(struct sys_device *sys_dev) | |||
| 916 | } | 927 | } |
| 917 | 928 | ||
| 918 | spin_lock_irqsave(&cpufreq_driver_lock, flags); | 929 | spin_lock_irqsave(&cpufreq_driver_lock, flags); |
| 919 | for_each_cpu_mask_nr(j, policy->cpus) { | 930 | for_each_cpu(j, policy->cpus) { |
| 920 | per_cpu(cpufreq_cpu_data, j) = policy; | 931 | per_cpu(cpufreq_cpu_data, j) = policy; |
| 921 | per_cpu(policy_cpu, j) = policy->cpu; | 932 | per_cpu(policy_cpu, j) = policy->cpu; |
| 922 | } | 933 | } |
| 923 | spin_unlock_irqrestore(&cpufreq_driver_lock, flags); | 934 | spin_unlock_irqrestore(&cpufreq_driver_lock, flags); |
| 924 | 935 | ||
| 925 | /* symlink affected CPUs */ | 936 | /* symlink affected CPUs */ |
| 926 | for_each_cpu_mask_nr(j, policy->cpus) { | 937 | for_each_cpu(j, policy->cpus) { |
| 927 | if (j == cpu) | 938 | if (j == cpu) |
| 928 | continue; | 939 | continue; |
| 929 | if (!cpu_online(j)) | 940 | if (!cpu_online(j)) |
| @@ -963,7 +974,7 @@ static int cpufreq_add_dev(struct sys_device *sys_dev) | |||
| 963 | 974 | ||
| 964 | err_out_unregister: | 975 | err_out_unregister: |
| 965 | spin_lock_irqsave(&cpufreq_driver_lock, flags); | 976 | spin_lock_irqsave(&cpufreq_driver_lock, flags); |
| 966 | for_each_cpu_mask_nr(j, policy->cpus) | 977 | for_each_cpu(j, policy->cpus) |
| 967 | per_cpu(cpufreq_cpu_data, j) = NULL; | 978 | per_cpu(cpufreq_cpu_data, j) = NULL; |
| 968 | spin_unlock_irqrestore(&cpufreq_driver_lock, flags); | 979 | spin_unlock_irqrestore(&cpufreq_driver_lock, flags); |
| 969 | 980 | ||
| @@ -1024,7 +1035,7 @@ static int __cpufreq_remove_dev(struct sys_device *sys_dev) | |||
| 1024 | */ | 1035 | */ |
| 1025 | if (unlikely(cpu != data->cpu)) { | 1036 | if (unlikely(cpu != data->cpu)) { |
| 1026 | dprintk("removing link\n"); | 1037 | dprintk("removing link\n"); |
| 1027 | cpu_clear(cpu, data->cpus); | 1038 | cpumask_clear_cpu(cpu, data->cpus); |
| 1028 | spin_unlock_irqrestore(&cpufreq_driver_lock, flags); | 1039 | spin_unlock_irqrestore(&cpufreq_driver_lock, flags); |
| 1029 | sysfs_remove_link(&sys_dev->kobj, "cpufreq"); | 1040 | sysfs_remove_link(&sys_dev->kobj, "cpufreq"); |
| 1030 | cpufreq_cpu_put(data); | 1041 | cpufreq_cpu_put(data); |
| @@ -1045,8 +1056,8 @@ static int __cpufreq_remove_dev(struct sys_device *sys_dev) | |||
| 1045 | * per_cpu(cpufreq_cpu_data) while holding the lock, and remove | 1056 | * per_cpu(cpufreq_cpu_data) while holding the lock, and remove |
| 1046 | * the sysfs links afterwards. | 1057 | * the sysfs links afterwards. |
| 1047 | */ | 1058 | */ |
| 1048 | if (unlikely(cpus_weight(data->cpus) > 1)) { | 1059 | if (unlikely(cpumask_weight(data->cpus) > 1)) { |
| 1049 | for_each_cpu_mask_nr(j, data->cpus) { | 1060 | for_each_cpu(j, data->cpus) { |
| 1050 | if (j == cpu) | 1061 | if (j == cpu) |
| 1051 | continue; | 1062 | continue; |
| 1052 | per_cpu(cpufreq_cpu_data, j) = NULL; | 1063 | per_cpu(cpufreq_cpu_data, j) = NULL; |
| @@ -1055,8 +1066,8 @@ static int __cpufreq_remove_dev(struct sys_device *sys_dev) | |||
| 1055 | 1066 | ||
| 1056 | spin_unlock_irqrestore(&cpufreq_driver_lock, flags); | 1067 | spin_unlock_irqrestore(&cpufreq_driver_lock, flags); |
| 1057 | 1068 | ||
| 1058 | if (unlikely(cpus_weight(data->cpus) > 1)) { | 1069 | if (unlikely(cpumask_weight(data->cpus) > 1)) { |
| 1059 | for_each_cpu_mask_nr(j, data->cpus) { | 1070 | for_each_cpu(j, data->cpus) { |
| 1060 | if (j == cpu) | 1071 | if (j == cpu) |
| 1061 | continue; | 1072 | continue; |
| 1062 | dprintk("removing link for cpu %u\n", j); | 1073 | dprintk("removing link for cpu %u\n", j); |
| @@ -1090,7 +1101,10 @@ static int __cpufreq_remove_dev(struct sys_device *sys_dev) | |||
| 1090 | if (cpufreq_driver->exit) | 1101 | if (cpufreq_driver->exit) |
| 1091 | cpufreq_driver->exit(data); | 1102 | cpufreq_driver->exit(data); |
| 1092 | 1103 | ||
| 1104 | free_cpumask_var(data->related_cpus); | ||
| 1105 | free_cpumask_var(data->cpus); | ||
| 1093 | kfree(data); | 1106 | kfree(data); |
| 1107 | per_cpu(cpufreq_cpu_data, cpu) = NULL; | ||
| 1094 | 1108 | ||
| 1095 | cpufreq_debug_enable_ratelimit(); | 1109 | cpufreq_debug_enable_ratelimit(); |
| 1096 | return 0; | 1110 | return 0; |
diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c index e2657837d954..0320962c4ec5 100644 --- a/drivers/cpufreq/cpufreq_conservative.c +++ b/drivers/cpufreq/cpufreq_conservative.c | |||
| @@ -498,7 +498,7 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy, | |||
| 498 | return rc; | 498 | return rc; |
| 499 | } | 499 | } |
| 500 | 500 | ||
| 501 | for_each_cpu_mask_nr(j, policy->cpus) { | 501 | for_each_cpu(j, policy->cpus) { |
| 502 | struct cpu_dbs_info_s *j_dbs_info; | 502 | struct cpu_dbs_info_s *j_dbs_info; |
| 503 | j_dbs_info = &per_cpu(cpu_dbs_info, j); | 503 | j_dbs_info = &per_cpu(cpu_dbs_info, j); |
| 504 | j_dbs_info->cur_policy = policy; | 504 | j_dbs_info->cur_policy = policy; |
diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c index 2ab3c12b88af..6a2b036c9389 100644 --- a/drivers/cpufreq/cpufreq_ondemand.c +++ b/drivers/cpufreq/cpufreq_ondemand.c | |||
| @@ -400,7 +400,7 @@ static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info) | |||
| 400 | /* Get Absolute Load - in terms of freq */ | 400 | /* Get Absolute Load - in terms of freq */ |
| 401 | max_load_freq = 0; | 401 | max_load_freq = 0; |
| 402 | 402 | ||
| 403 | for_each_cpu_mask_nr(j, policy->cpus) { | 403 | for_each_cpu(j, policy->cpus) { |
| 404 | struct cpu_dbs_info_s *j_dbs_info; | 404 | struct cpu_dbs_info_s *j_dbs_info; |
| 405 | cputime64_t cur_wall_time, cur_idle_time; | 405 | cputime64_t cur_wall_time, cur_idle_time; |
| 406 | unsigned int idle_time, wall_time; | 406 | unsigned int idle_time, wall_time; |
| @@ -568,7 +568,7 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy, | |||
| 568 | return rc; | 568 | return rc; |
| 569 | } | 569 | } |
| 570 | 570 | ||
| 571 | for_each_cpu_mask_nr(j, policy->cpus) { | 571 | for_each_cpu(j, policy->cpus) { |
| 572 | struct cpu_dbs_info_s *j_dbs_info; | 572 | struct cpu_dbs_info_s *j_dbs_info; |
| 573 | j_dbs_info = &per_cpu(cpu_dbs_info, j); | 573 | j_dbs_info = &per_cpu(cpu_dbs_info, j); |
| 574 | j_dbs_info->cur_policy = policy; | 574 | j_dbs_info->cur_policy = policy; |
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index 484b3abf61bb..384b38d3e8e2 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h | |||
| @@ -80,8 +80,8 @@ struct cpufreq_real_policy { | |||
| 80 | }; | 80 | }; |
| 81 | 81 | ||
| 82 | struct cpufreq_policy { | 82 | struct cpufreq_policy { |
| 83 | cpumask_t cpus; /* CPUs requiring sw coordination */ | 83 | cpumask_var_t cpus; /* CPUs requiring sw coordination */ |
| 84 | cpumask_t related_cpus; /* CPUs with any coordination */ | 84 | cpumask_var_t related_cpus; /* CPUs with any coordination */ |
| 85 | unsigned int shared_type; /* ANY or ALL affected CPUs | 85 | unsigned int shared_type; /* ANY or ALL affected CPUs |
| 86 | should set cpufreq */ | 86 | should set cpufreq */ |
| 87 | unsigned int cpu; /* cpu nr of registered CPU */ | 87 | unsigned int cpu; /* cpu nr of registered CPU */ |
