This patch is against 2.6.16-12 This patch implements the i386 side of a patch posted back in September by Andi Kleen (originally from Stuart Hayes). Since phys_cpu_present_map is indexed by APIC ID we need to initialize it with the APIC ID of the boot processor rather than 0. The upstream kernel has the fix for the x86_64 side but not for the i386 side. This patch is needed in order to boot the 32-bit kernel on systems where the boot processor is not APIC ID 0. Similarly, I fixed the definition of hard_smp_processor_id for the uniprocessor case. Since this is supposed to return an APIC ID, it should not just default to zero when CONFIG_SMP is off. In order to do this, I had to move the hard_smp_processor_id() macro into the arch-specific include file. Since I don't have access to all of the affected archs, it would be nice to have a few more eyes look at that part. This fix allowed me to boot both the 32-bit UP and SMP kernels on a 16-way x86_64 system. --jim