All of lore.kernel.org
 help / color / mirror / Atom feed
* NUMA-Q breakage 2/7 xquad_portio ioremap deadlock
@ 2002-07-12 22:39 William Lee Irwin III
  2002-07-12 22:58 ` Martin J. Bligh
  0 siblings, 1 reply; 3+ messages in thread
From: William Lee Irwin III @ 2002-07-12 22:39 UTC (permalink / raw)
  To: linux-kernel; +Cc: Martin.Bligh

The cpu_online_map stuff for hotplug cpu created a brand new bootstrap
ordering problem for NUMA-Q. The mmapped portio region needs to be
ioremapped early but ioremap attempts to do TLB shootdown, and
smp_call_function() (called by flush_tlb_all()) deadlocks when
cpu_online_map is uninitialized.

Workaround (due to Matt Dobson) below.



diff -Nur linux-2.5.23-vanilla/arch/i386/kernel/smp.c linux-2.5.23-patched/arch/i386/kernel/smp.c
--- linux-2.5.23-vanilla/arch/i386/kernel/smp.c	Tue Jun 18 19:11:47 2002
+++ linux-2.5.23-patched/arch/i386/kernel/smp.c	Mon Jul  8 14:52:32 2002
@@ -569,7 +569,7 @@
 	struct call_data_struct data;
 	int cpus = num_online_cpus()-1;
 
-	if (!cpus)
+	if (cpus <= 0)
 		return 0;
 
 	data.func = func;

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

* Re: NUMA-Q breakage 2/7 xquad_portio ioremap deadlock
  2002-07-12 22:39 NUMA-Q breakage 2/7 xquad_portio ioremap deadlock William Lee Irwin III
@ 2002-07-12 22:58 ` Martin J. Bligh
  2002-07-12 23:04   ` William Lee Irwin III
  0 siblings, 1 reply; 3+ messages in thread
From: Martin J. Bligh @ 2002-07-12 22:58 UTC (permalink / raw)
  To: William Lee Irwin III, linux-kernel; +Cc: colpatch

> The cpu_online_map stuff for hotplug cpu created a brand new bootstrap
> ordering problem for NUMA-Q. The mmapped portio region needs to be
> ioremapped early but ioremap attempts to do TLB shootdown, and
> smp_call_function() (called by flush_tlb_all()) deadlocks when
> cpu_online_map is uninitialized.
> 
> Workaround (due to Matt Dobson) below.
> 
> 
> 
> diff -Nur linux-2.5.23-vanilla/arch/i386/kernel/smp.c linux-2.5.23-patched/arch/i386/kernel/smp.c
> --- linux-2.5.23-vanilla/arch/i386/kernel/smp.c	Tue Jun 18 19:11:47 2002
> +++ linux-2.5.23-patched/arch/i386/kernel/smp.c	Mon Jul  8 14:52:32 2002
> @@ -569,7 +569,7 @@
>  	struct call_data_struct data;
>  	int cpus = num_online_cpus()-1;
>  
> -	if (!cpus)
> +	if (cpus <= 0)
>  		return 0;
>  
>  	data.func = func;

Would it be slightly less of a hack if we just move the ioremap down below
set_bit(0, &cpu_online_map); later on in smp_boot_cpus ? Untested patch
below. As long as we set up the xquad_portio remap before any other cpus 
are online, I can't see it matters exactly when we do it ....

Either that, or we just define cpu_online_map to be =1 to start with.

M.

--- virgin-2.5.25/arch/i386/kernel/smpboot.c	Fri Jul  5 16:42:23 2002
+++ linux-2.5.25-ioremap/arch/i386/kernel/smpboot.c	Fri Jul 12 15:55:20 2002
@@ -1019,16 +1019,6 @@
 {
 	int apicid, cpu, bit;
 
-        if (clustered_apic_mode && (numnodes > 1)) {
-                printk("Remapping cross-quad port I/O for %d quads\n",
-			numnodes);
-                printk("xquad_portio vaddr 0x%08lx, len %08lx\n",
-                        (u_long) xquad_portio, 
-			(u_long) numnodes * XQUAD_PORTIO_LEN);
-                xquad_portio = ioremap (XQUAD_PORTIO_BASE, 
-			numnodes * XQUAD_PORTIO_LEN);
-        }
-
 #ifdef CONFIG_MTRR
 	/*  Must be done before other processors booted  */
 	mtrr_init_boot_cpu ();
@@ -1126,6 +1116,16 @@
 
 	if (GET_APIC_ID(apic_read(APIC_ID)) != boot_cpu_physical_apicid)
 		BUG();
+
+        if (clustered_apic_mode && (numnodes > 1)) {
+                printk("Remapping cross-quad port I/O for %d quads\n",
+			numnodes);
+                printk("xquad_portio vaddr 0x%08lx, len %08lx\n",
+                        (u_long) xquad_portio, 
+			(u_long) numnodes * XQUAD_PORTIO_LEN);
+                xquad_portio = ioremap (XQUAD_PORTIO_BASE, 
+			numnodes * XQUAD_PORTIO_LEN);
+        }
 
 	/*
 	 * Scan the CPU present map and fire up the other CPUs via do_boot_cpu


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

* Re: NUMA-Q breakage 2/7 xquad_portio ioremap deadlock
  2002-07-12 22:58 ` Martin J. Bligh
@ 2002-07-12 23:04   ` William Lee Irwin III
  0 siblings, 0 replies; 3+ messages in thread
From: William Lee Irwin III @ 2002-07-12 23:04 UTC (permalink / raw)
  To: Martin J. Bligh; +Cc: linux-kernel, colpatch

>> The cpu_online_map stuff for hotplug cpu created a brand new bootstrap
>> ordering problem for NUMA-Q. The mmapped portio region needs to be
>> ioremapped early but ioremap attempts to do TLB shootdown, and
>> smp_call_function() (called by flush_tlb_all()) deadlocks when
>> cpu_online_map is uninitialized.

On Fri, Jul 12, 2002 at 03:58:50PM -0700, Martin J. Bligh wrote:
> Would it be slightly less of a hack if we just move the ioremap down below
> set_bit(0, &cpu_online_map); later on in smp_boot_cpus ? Untested patch
> below. As long as we set up the xquad_portio remap before any other cpus 
> are online, I can't see it matters exactly when we do it ....
> Either that, or we just define cpu_online_map to be =1 to start with.
> M.

This looks better than fiddling with smp_call_function().


Cheers,
Bill

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

end of thread, other threads:[~2002-07-12 23:02 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-07-12 22:39 NUMA-Q breakage 2/7 xquad_portio ioremap deadlock William Lee Irwin III
2002-07-12 22:58 ` Martin J. Bligh
2002-07-12 23:04   ` William Lee Irwin III

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.