Name: Simple Cleanup of Uses of cpumask_t Status: Booted on 2.6.5 While looking at how ugly it would be to abandon cpumask_t altogether, I came across some fairly suboptimal uses. This cleans them up. Index: linux-2.6.13-rc4-git3-Misc/arch/i386/kernel/smp.c =================================================================== --- linux-2.6.13-rc4-git3-Misc.orig/arch/i386/kernel/smp.c 2005-08-01 11:29:47.000000000 +1000 +++ linux-2.6.13-rc4-git3-Misc/arch/i386/kernel/smp.c 2005-08-01 16:16:23.000000000 +1000 @@ -203,30 +203,27 @@ local_irq_save(flags); - for (query_cpu = 0; query_cpu < NR_CPUS; ++query_cpu) { - if (cpu_isset(query_cpu, mask)) { + for_each_cpu_mask(query_cpu, mask) { + /* + * Wait for idle. + */ + apic_wait_icr_idle(); - /* - * Wait for idle. - */ - apic_wait_icr_idle(); + /* + * prepare target chip field + */ + cfg = __prepare_ICR2(cpu_to_logical_apicid(query_cpu)); + apic_write_around(APIC_ICR2, cfg); - /* - * prepare target chip field - */ - cfg = __prepare_ICR2(cpu_to_logical_apicid(query_cpu)); - apic_write_around(APIC_ICR2, cfg); + /* + * program the ICR + */ + cfg = __prepare_ICR(0, vector); - /* - * program the ICR - */ - cfg = __prepare_ICR(0, vector); - - /* - * Send the IPI. The write to APIC_ICR fires this off. - */ - apic_write_around(APIC_ICR, cfg); - } + /* + * Send the IPI. The write to APIC_ICR fires this off. + */ + apic_write_around(APIC_ICR, cfg); } local_irq_restore(flags); } Index: linux-2.6.13-rc4-git3-Misc/arch/i386/kernel/smpboot.c =================================================================== --- linux-2.6.13-rc4-git3-Misc.orig/arch/i386/kernel/smpboot.c 2005-08-01 11:29:47.000000000 +1000 +++ linux-2.6.13-rc4-git3-Misc/arch/i386/kernel/smpboot.c 2005-08-01 16:16:23.000000000 +1000 @@ -279,19 +279,15 @@ } sum = 0; - for (i = 0; i < NR_CPUS; i++) { - if (cpu_isset(i, cpu_callout_map)) { - t0 = tsc_values[i]; - sum += t0; - } + for_each_cpu(i) { + t0 = tsc_values[i]; + sum += t0; } avg = sum; do_div(avg, num_booting_cpus()); sum = 0; - for (i = 0; i < NR_CPUS; i++) { - if (!cpu_isset(i, cpu_callout_map)) - continue; + for_each_cpu(i) { delta = tsc_values[i] - avg; if (delta < 0) delta = -delta; @@ -1200,9 +1196,8 @@ * Allow the user to impress friends. */ Dprintk("Before bogomips.\n"); - for (cpu = 0; cpu < NR_CPUS; cpu++) - if (cpu_isset(cpu, cpu_callout_map)) - bogosum += cpu_data[cpu].loops_per_jiffy; + for_each_cpu(cpu) + bogosum += cpu_data[cpu].loops_per_jiffy; printk(KERN_INFO "Total of %d processors activated (%lu.%02lu BogoMIPS).\n", cpucount+1, @@ -1358,7 +1353,7 @@ per_cpu(cpu_state, cpu) = CPU_UP_PREPARE; /* Unleash the CPU! */ cpu_set(cpu, smp_commenced_mask); - while (!cpu_isset(cpu, cpu_online_map)) + while (!cpu_online(cpu)) mb(); return 0; } Index: linux-2.6.13-rc4-git3-Misc/arch/i386/mach-voyager/voyager_smp.c =================================================================== --- linux-2.6.13-rc4-git3-Misc.orig/arch/i386/mach-voyager/voyager_smp.c 2005-08-01 11:29:48.000000000 +1000 +++ linux-2.6.13-rc4-git3-Misc/arch/i386/mach-voyager/voyager_smp.c 2005-08-01 16:16:23.000000000 +1000 @@ -119,7 +119,7 @@ for_each_online_cpu(cpu) { if(cpuset & (1<set_affinity || no_irq_affinity) return -EIO; @@ -56,8 +56,7 @@ * way to make the system unusable accidentally :-) At least * one online CPU still has to be targeted. */ - cpus_and(tmp, new_value, cpu_online_map); - if (cpus_empty(tmp)) + if (any_online_cpu(new_value) == NR_CPUS) return -EINVAL; proc_set_irq_affinity(irq, new_value); Index: linux-2.6.13-rc4-git3-Misc/net/sctp/proc.c =================================================================== --- linux-2.6.13-rc4-git3-Misc.orig/net/sctp/proc.c 2005-07-15 04:39:58.000000000 +1000 +++ linux-2.6.13-rc4-git3-Misc/net/sctp/proc.c 2005-08-01 16:16:23.000000000 +1000 @@ -68,9 +68,7 @@ unsigned long res = 0; int i; - for (i = 0; i < NR_CPUS; i++) { - if (!cpu_possible(i)) - continue; + for_each_cpu(i) { res += *((unsigned long *) (((void *) per_cpu_ptr(mib[0], i)) + sizeof (unsigned long) * nr));