From: Vivek Goyal This patch fixes the problem of secondary cpus not coming up over a reboot. This problem was seen when a kernel compiled for non default (16MB) location is booted. Signed-off-by: Vivek Goyal Signed-off-by: Andrew Morton --- 25-akpm/arch/i386/kernel/trampoline.S | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-) diff -puN arch/i386/kernel/trampoline.S~boot_ap_for_nondefault_kernel arch/i386/kernel/trampoline.S --- 25/arch/i386/kernel/trampoline.S~boot_ap_for_nondefault_kernel Thu Dec 23 15:05:51 2004 +++ 25-akpm/arch/i386/kernel/trampoline.S Thu Dec 23 15:05:51 2004 @@ -51,8 +51,14 @@ r_base = . movl $0xA5A5A5A5, trampoline_data - r_base # write marker for master knows we're running - lidt boot_idt - r_base # load idt with 0, 0 - lgdt boot_gdt - r_base # load gdt with whatever is appropriate + /* GDT tables in non default location kernel can be beyond 16MB and + * lgdt will not be able to load the address as in real mode default + * operand size is 16bit. Use lgdtl instead to force operand size + * to 32 bit. + */ + + lidtl boot_idt - r_base # load idt with 0, 0 + lgdtl boot_gdt - r_base # load gdt with whatever is appropriate xor %ax, %ax inc %ax # protected mode (PE) bit _