Messages in this thread | | | Date | Wed, 06 Nov 2002 14:32:50 -0800 | From | Andrew Morton <> | Subject | Re: Strange panic as soon as timer interrupts are enabled (recent 2.5) |
| |
"Martin J. Bligh" wrote: > > ... > --------------------- > > BOOT CPU: > > init > smp_prepare_cpus > smp_boot_cpus > setup_local_APIC > foreach cpu > do_boot_cpu > wakeup_secondary_via_(NMI|INIT) > {set bit in cpu_callout_map} > {spin on cpu_callin_map} > setup_IO_APIC > synchronize_tsc_bp > smp_init > foreach cpu > cpu_up > notifier_call_chain(CPU_UP_PREPARE) > __cpu_up > {set bit in smp_commenced_mask} > {spin on cpu_online_map} > notifier_call_chain(CPU_ONLINE) > smp_cpus_done > smp_commence
Nice!
> ------------------------ > > SECONDARY CPU: > > start_secondary > cpu_init > smp_callin > {spin on cpu_callout_map} > setup_local_APIC > local_irq_enable > calibrate_delay > disable_APIC_timer > {set our bit in cpu_callin_map} > synchronise_tsc_api > {spin on smp_commenced_mask} > enable_APIC_timer > {set our bit in cpu_online_map} > idle
So this is the bug, isn't it? Can the calibrate_delay stuff be moved until _after_ the bit has been set in smp_commenced_mask??
> > > > In this case I'd say "all interrupts". The secondary really > > should be 100% dormant until all CPU_UP_PREPARE callouts have > > been run and have returned NOTIFY_OK. > > > > At least, that's how I'd have designed it. > > Well that makes sense to me. Apart from when I started doing it, > it seems that in smp_callin we do calibrate_delay, which looks > like it needs interrupts enabled (I could be wrong). I suppose > I could just disable them at the end of smp_callin again, but > it's all rather ugly. Maybe after we do disable_APIC_timer in > smp_callin.
Maybe you could copy the boot cpu's calibrate_delay result over to all cpu_possible secondaries, then redo the calibration for real once the secondary is actually legally up and running. - 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/
| |