public inbox for linux-ia64@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] 2.6.14-rc3: wider use of for_each_cpu_mask() in arch/ia64
@ 2005-10-08 17:43 hawkes
  2005-10-09  0:38 ` Chen, Kenneth W
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: hawkes @ 2005-10-08 17:43 UTC (permalink / raw)
  To: linux-ia64

In arch/ia64 change the explicit use of for-loops and NR_CPUS into the
general for_each_cpu_mask() construct.  This widens the scope of
potential future optimizations of for_each_cpu_mask().

Signed-off-by: John Hawkes <hawkes@sgi.com>

Index: linux/arch/ia64/mm/tlb.c
=================================--- linux.orig/arch/ia64/mm/tlb.c	2005-08-28 16:41:01.000000000 -0700
+++ linux/arch/ia64/mm/tlb.c	2005-10-07 14:30:11.000000000 -0700
@@ -77,9 +77,10 @@
 	/* can't call flush_tlb_all() here because of race condition with O(1) scheduler [EF] */
 	{
 		int cpu = get_cpu(); /* prevent preemption/migration */
-		for (i = 0; i < NR_CPUS; ++i)
-			if (cpu_online(i) && (i != cpu))
+		for_each_cpu_mask(i, cpu_online_map) {
+			if (i != cpu)
 				per_cpu(ia64_need_tlb_flush, i) = 1;
+		}
 		put_cpu();
 	}
 	local_flush_tlb_all();
Index: linux/arch/ia64/kernel/module.c
=================================--- linux.orig/arch/ia64/kernel/module.c	2005-08-28 16:41:01.000000000 -0700
+++ linux/arch/ia64/kernel/module.c	2005-10-07 14:34:09.000000000 -0700
@@ -948,7 +948,8 @@
 {
 	unsigned int i;
 	for (i = 0; i < NR_CPUS; i++)
-		if (cpu_possible(i))
-			memcpy(pcpudst + __per_cpu_offset[i], src, size);
+	for_each_cpu_mask(i, cpu_possible_map) {
+		memcpy(pcpudst + __per_cpu_offset[i], src, size);
+	}
 }
 #endif /* CONFIG_SMP */
Index: linux/arch/ia64/kernel/smpboot.c
=================================--- linux.orig/arch/ia64/kernel/smpboot.c	2005-08-28 16:41:01.000000000 -0700
+++ linux/arch/ia64/kernel/smpboot.c	2005-10-07 14:36:51.000000000 -0700
@@ -695,8 +695,9 @@
 	 */
 
 	for (cpu = 0; cpu < NR_CPUS; cpu++)
-		if (cpu_online(cpu))
-			bogosum += cpu_data(cpu)->loops_per_jiffy;
+	for_each_cpu_mask(cpu, cpu_online_map) {
+		bogosum += cpu_data(cpu)->loops_per_jiffy;
+	}
 
 	printk(KERN_INFO "Total of %d processors activated (%lu.%02lu BogoMIPS).\n",
 	       (int)num_online_cpus(), bogosum/(500000/HZ), (bogosum/(5000/HZ))%100);
Index: linux/arch/ia64/kernel/irq.c
=================================--- linux.orig/arch/ia64/kernel/irq.c	2005-10-06 15:03:20.000000000 -0700
+++ linux/arch/ia64/kernel/irq.c	2005-10-07 14:40:01.000000000 -0700
@@ -57,9 +57,9 @@
 
 	if (i = 0) {
 		seq_printf(p, "           ");
-		for (j=0; j<NR_CPUS; j++)
-			if (cpu_online(j))
-				seq_printf(p, "CPU%d       ",j);
+		for_each_cpu_mask(j, cpu_online_map) {
+			seq_printf(p, "CPU%d       ",j);
+		}
 		seq_putc(p, '\n');
 	}
 
@@ -72,9 +72,9 @@
 #ifndef CONFIG_SMP
 		seq_printf(p, "%10u ", kstat_irqs(i));
 #else
-		for (j = 0; j < NR_CPUS; j++)
-			if (cpu_online(j))
-				seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
+		for_each_cpu_mask(j, cpu_online_map) {
+			seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
+		}
 #endif
 		seq_printf(p, " %14s", irq_desc[i].handler->typename);
 		seq_printf(p, "  %s", action->name);
Index: linux/arch/ia64/kernel/smp.c
=================================--- linux.orig/arch/ia64/kernel/smp.c	2005-10-06 15:03:27.000000000 -0700
+++ linux/arch/ia64/kernel/smp.c	2005-10-07 14:44:22.000000000 -0700
@@ -200,8 +200,8 @@
 {
 	unsigned int i;
 
-	for (i = 0; i < NR_CPUS; i++) {
-		if (cpu_online(i) && i != smp_processor_id())
+	for_each_cpu_mask(i, cpu_online_map) {
+		if (i != smp_processor_id())
 			send_IPI_single(i, op);
 	}
 }
@@ -214,9 +214,9 @@
 {
 	int i;
 
-	for (i = 0; i < NR_CPUS; i++)
-		if (cpu_online(i))
-			send_IPI_single(i, op);
+	for_each_cpu_mask(i, cpu_online_map) {
+		send_IPI_single(i, op);
+	}
 }
 
 /*
Index: linux/arch/ia64/kernel/mca.c
=================================--- linux.orig/arch/ia64/kernel/mca.c	2005-10-06 15:03:27.000000000 -0700
+++ linux/arch/ia64/kernel/mca.c	2005-10-07 14:47:45.000000000 -0700
@@ -546,9 +546,7 @@
 	KDBA_MCA_TRACE();
 
 	/* Clear the Rendez checkin flag for all cpus */
-	for(cpu = 0; cpu < NR_CPUS; cpu++) {
-		if (!cpu_online(cpu))
-			continue;
+	for_each_cpu_mask(cpu, cpu_online_map) {
 		if (ia64_mc_info.imi_rendez_checkin[cpu] = IA64_MCA_RENDEZ_CHECKIN_DONE)
 			ia64_mca_wakeup(cpu);
 	}

^ permalink raw reply	[flat|nested] 4+ messages in thread

* RE: [PATCH] 2.6.14-rc3: wider use of for_each_cpu_mask() in arch/ia64
  2005-10-08 17:43 [PATCH] 2.6.14-rc3: wider use of for_each_cpu_mask() in arch/ia64 hawkes
@ 2005-10-09  0:38 ` Chen, Kenneth W
  2005-10-10 11:37 ` Robin Holt
  2005-10-10 15:43 ` hawkes
  2 siblings, 0 replies; 4+ messages in thread
From: Chen, Kenneth W @ 2005-10-09  0:38 UTC (permalink / raw)
  To: linux-ia64

hawkes@sgi.com wrote on Saturday, October 08, 2005 10:44 AM
> --- linux.orig/arch/ia64/kernel/module.c	2005-08-28
16:41:01.000000000 -0700
> +++ linux/arch/ia64/kernel/module.c	2005-10-07 14:34:09.000000000
-0700
> @@ -948,7 +948,8 @@
>  {
>  	unsigned int i;
>  	for (i = 0; i < NR_CPUS; i++)
> -		if (cpu_possible(i))
> -			memcpy(pcpudst + __per_cpu_offset[i], src,
size);
> +	for_each_cpu_mask(i, cpu_possible_map) {
> +		memcpy(pcpudst + __per_cpu_offset[i], src, size);
> +	}
>  }
>  #endif /* CONFIG_SMP */

Looks like you forgot to delete the for (i=0 ...) clause.


> --- linux.orig/arch/ia64/kernel/smpboot.c	2005-08-28
16:41:01.000000000 -0700
> +++ linux/arch/ia64/kernel/smpboot.c	2005-10-07 14:36:51.000000000
-0700
> @@ -695,8 +695,9 @@
>  	 */
>  
>  	for (cpu = 0; cpu < NR_CPUS; cpu++)
> -		if (cpu_online(cpu))
> -			bogosum += cpu_data(cpu)->loops_per_jiffy;
> +	for_each_cpu_mask(cpu, cpu_online_map) {
> +		bogosum += cpu_data(cpu)->loops_per_jiffy;
> +	}

Same here.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] 2.6.14-rc3: wider use of for_each_cpu_mask() in arch/ia64
  2005-10-08 17:43 [PATCH] 2.6.14-rc3: wider use of for_each_cpu_mask() in arch/ia64 hawkes
  2005-10-09  0:38 ` Chen, Kenneth W
@ 2005-10-10 11:37 ` Robin Holt
  2005-10-10 15:43 ` hawkes
  2 siblings, 0 replies; 4+ messages in thread
From: Robin Holt @ 2005-10-10 11:37 UTC (permalink / raw)
  To: linux-ia64

On Sat, Oct 08, 2005 at 10:43:31AM -0700, hawkes@sgi.com wrote:
> In arch/ia64 change the explicit use of for-loops and NR_CPUS into the
> general for_each_cpu_mask() construct.  This widens the scope of
> potential future optimizations of for_each_cpu_mask().
> 
> Signed-off-by: John Hawkes <hawkes@sgi.com>
> 
> Index: linux/arch/ia64/mm/tlb.c
> =================================> --- linux.orig/arch/ia64/mm/tlb.c	2005-08-28 16:41:01.000000000 -0700
> +++ linux/arch/ia64/mm/tlb.c	2005-10-07 14:30:11.000000000 -0700
> @@ -77,9 +77,10 @@
>  	/* can't call flush_tlb_all() here because of race condition with O(1) scheduler [EF] */
>  	{
>  		int cpu = get_cpu(); /* prevent preemption/migration */
> -		for (i = 0; i < NR_CPUS; ++i)
> -			if (cpu_online(i) && (i != cpu))
> +		for_each_cpu_mask(i, cpu_online_map) {

What about for_each_online_cpu?  Reads a little more cleanly.  Accomplishes
the same thing.

Robin

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH] 2.6.14-rc3: wider use of for_each_cpu_mask() in arch/ia64
  2005-10-08 17:43 [PATCH] 2.6.14-rc3: wider use of for_each_cpu_mask() in arch/ia64 hawkes
  2005-10-09  0:38 ` Chen, Kenneth W
  2005-10-10 11:37 ` Robin Holt
@ 2005-10-10 15:43 ` hawkes
  2 siblings, 0 replies; 4+ messages in thread
From: hawkes @ 2005-10-10 15:43 UTC (permalink / raw)
  To: linux-ia64

Retry with fixes:

In arch/ia64 change the explicit use of for-loops and NR_CPUS into the
general for_each_cpu() or for_each_online_cpu() constructs, as
appropriate.  This widens the scope of potential future optimizations
of the general constructs, as well as takes advantage of the existing
optimizations of first_cpu() and next_cpu().

Signed-off-by: John Hawkes <hawkes@sgi.com>

Index: linux/arch/ia64/mm/tlb.c
=================================--- linux.orig/arch/ia64/mm/tlb.c	2005-10-10 08:27:31.000000000 -0700
+++ linux/arch/ia64/mm/tlb.c	2005-10-10 08:32:03.000000000 -0700
@@ -77,9 +77,10 @@
 	/* can't call flush_tlb_all() here because of race condition with O(1) scheduler [EF] */
 	{
 		int cpu = get_cpu(); /* prevent preemption/migration */
-		for (i = 0; i < NR_CPUS; ++i)
-			if (cpu_online(i) && (i != cpu))
+		for_each_online_cpu(i) {
+			if (i != cpu)
 				per_cpu(ia64_need_tlb_flush, i) = 1;
+		}
 		put_cpu();
 	}
 	local_flush_tlb_all();
Index: linux/arch/ia64/kernel/module.c
=================================--- linux.orig/arch/ia64/kernel/module.c	2005-10-10 08:27:31.000000000 -0700
+++ linux/arch/ia64/kernel/module.c	2005-10-10 08:32:47.000000000 -0700
@@ -947,8 +947,8 @@
 percpu_modcopy (void *pcpudst, const void *src, unsigned long size)
 {
 	unsigned int i;
-	for (i = 0; i < NR_CPUS; i++)
-		if (cpu_possible(i))
-			memcpy(pcpudst + __per_cpu_offset[i], src, size);
+	for_each_cpu(i) {
+		memcpy(pcpudst + __per_cpu_offset[i], src, size);
+	}
 }
 #endif /* CONFIG_SMP */
Index: linux/arch/ia64/kernel/smpboot.c
=================================--- linux.orig/arch/ia64/kernel/smpboot.c	2005-10-10 08:27:31.000000000 -0700
+++ linux/arch/ia64/kernel/smpboot.c	2005-10-10 08:33:18.000000000 -0700
@@ -694,9 +694,9 @@
 	 * Allow the user to impress friends.
 	 */
 
-	for (cpu = 0; cpu < NR_CPUS; cpu++)
-		if (cpu_online(cpu))
-			bogosum += cpu_data(cpu)->loops_per_jiffy;
+	for_each_online_cpu(cpu) {
+		bogosum += cpu_data(cpu)->loops_per_jiffy;
+	}
 
 	printk(KERN_INFO "Total of %d processors activated (%lu.%02lu BogoMIPS).\n",
 	       (int)num_online_cpus(), bogosum/(500000/HZ), (bogosum/(5000/HZ))%100);
Index: linux/arch/ia64/kernel/irq.c
=================================--- linux.orig/arch/ia64/kernel/irq.c	2005-10-10 08:27:31.000000000 -0700
+++ linux/arch/ia64/kernel/irq.c	2005-10-10 08:34:09.000000000 -0700
@@ -57,9 +57,9 @@
 
 	if (i = 0) {
 		seq_printf(p, "           ");
-		for (j=0; j<NR_CPUS; j++)
-			if (cpu_online(j))
-				seq_printf(p, "CPU%d       ",j);
+		for_each_online_cpu(j) {
+			seq_printf(p, "CPU%d       ",j);
+		}
 		seq_putc(p, '\n');
 	}
 
@@ -72,9 +72,9 @@
 #ifndef CONFIG_SMP
 		seq_printf(p, "%10u ", kstat_irqs(i));
 #else
-		for (j = 0; j < NR_CPUS; j++)
-			if (cpu_online(j))
-				seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
+		for_each_online_cpu(j) {
+			seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
+		}
 #endif
 		seq_printf(p, " %14s", irq_desc[i].handler->typename);
 		seq_printf(p, "  %s", action->name);
Index: linux/arch/ia64/kernel/smp.c
=================================--- linux.orig/arch/ia64/kernel/smp.c	2005-10-10 08:27:31.000000000 -0700
+++ linux/arch/ia64/kernel/smp.c	2005-10-10 08:34:50.000000000 -0700
@@ -200,8 +200,8 @@
 {
 	unsigned int i;
 
-	for (i = 0; i < NR_CPUS; i++) {
-		if (cpu_online(i) && i != smp_processor_id())
+	for_each_online_cpu(i) {
+		if (i != smp_processor_id())
 			send_IPI_single(i, op);
 	}
 }
@@ -214,9 +214,9 @@
 {
 	int i;
 
-	for (i = 0; i < NR_CPUS; i++)
-		if (cpu_online(i))
-			send_IPI_single(i, op);
+	for_each_online_cpu(i) {
+		send_IPI_single(i, op);
+	}
 }
 
 /*

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2005-10-10 15:43 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-10-08 17:43 [PATCH] 2.6.14-rc3: wider use of for_each_cpu_mask() in arch/ia64 hawkes
2005-10-09  0:38 ` Chen, Kenneth W
2005-10-10 11:37 ` Robin Holt
2005-10-10 15:43 ` hawkes

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox