* 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 a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox