* 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.