This patch series is based on Almu's work on SMP, with additional work by me and refactored for upstream.
My goal is to have --enable-ncpus=X and --{enable/disable}-apic working with X >= 1. That means PIC should still work with SMP on i386. With --enable-ncpus=1 and --disable-apic it still works as before. With --enable-ncpus=2 and --disable-apic it hangs at boot with -smp 1 (timer routing issue?) With --enable-ncpus=2 and --enable-apic it general protection faults with -smp 1 or 2 (nested interrupts?) The first 6 patches are independent from each other and quite small: [PATCH 01/12] kdb: Fix TODO for multiprocessor [PATCH 02/12] kern/startup: Disable interrupts before starting APs [PATCH 03/12] bios32: Use phystokv() on low bios addresses [PATCH 04/12] acpi: Add lapic_addr [PATCH 05/12] linux: Reduce worst case wait to 10 seconds for disks [PATCH 06/12] linux drivers: Don't depend on curr_pic_mask for APIC The rest of the patches are to be reviewed in order of increasing difficulty: [PATCH 07/12] i386/pit: Tune delays [PATCH 08/12] i386: Add AP variants of descriptor tables [PATCH 09/12] i386: Fix lapic and ioapic for smp [PATCH 10/12] Add cpu_number and cpuboot [PATCH 11/12] i386: Fix race in multiprocessor ktss The last commit is difficult to split up and includes changes in locore.S: [PATCH 12/12] i386: Refactor int stacks to be per cpu for SMP