Messages in this thread Patch in this message |  | | | Date | Sun, 17 Nov 2002 23:19:46 -0800 | | From | William Lee Irwin III <> | | Subject | Re: Linux v2.5.48 |
| |
On Sun, Nov 17, 2002 at 10:57:05PM -0800, William Lee Irwin III wrote: > This oopses on NUMA-Q sometime prior to TSC synch and then hangs in TSC > synch because not all cpus are responding where 2.5.47-mm3 (which > included some intermediate bk stuff) did not. This is because AP's are > taking timer interrupts before they are prepared to do so. Please apply > the following patch from Martin Bligh which resolves this issue:
Actually, please apply this one instead. The prior patch did not re-enable interrupts appropriately in its return paths (pointed out by Andrew Morton):
diff -urpN linux-2.5.48/arch/i386/kernel/smpboot.c numaq-2.5.48/arch/i386/kernel/smpboot.c --- linux-2.5.48/arch/i386/kernel/smpboot.c 2002-11-17 20:29:45.000000000 -0800 +++ numaq-2.5.48/arch/i386/kernel/smpboot.c 2002-11-17 22:35:05.000000000 -0800 @@ -419,6 +419,7 @@ void __init smp_callin(void) smp_store_cpu_info(cpuid); disable_APIC_timer(); + local_irq_disable(); /* * Allow the master to continue. */ @@ -1179,13 +1180,18 @@ void __init smp_prepare_cpus(unsigned in int __devinit __cpu_up(unsigned int cpu) { /* This only works at boot for x86. See "rewrite" above. */ - if (test_bit(cpu, &smp_commenced_mask)) + if (test_bit(cpu, &smp_commenced_mask)) { + local_irq_enable(); return -ENOSYS; + } /* In case one didn't come up */ - if (!test_bit(cpu, &cpu_callin_map)) + if (!test_bit(cpu, &cpu_callin_map)) { + local_irq_enable(); return -EIO; + } + local_irq_enable(); /* Unleash the CPU! */ set_bit(cpu, &smp_commenced_mask); while (!test_bit(cpu, &cpu_online_map)) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |