From: Andi Kleen - Make it compile again on UP - Fix 32bit IPC (got broken in previous patch) - Tell BIOS we run in long mode (this is a nop currently, but will help with some future boxes) arch/x86_64/boot/setup.S | 5 +++++ arch/x86_64/ia32/ipc32.c | 8 ++++---- arch/x86_64/kernel/x8664_ksyms.c | 2 ++ 3 files changed, 11 insertions(+), 4 deletions(-) diff -puN arch/x86_64/boot/setup.S~x86_64-critical-fixes arch/x86_64/boot/setup.S --- 25/arch/x86_64/boot/setup.S~x86_64-critical-fixes 2003-07-10 18:47:11.000000000 -0700 +++ 25-akpm/arch/x86_64/boot/setup.S 2003-07-10 18:47:11.000000000 -0700 @@ -350,6 +350,11 @@ long_mode_panic: sse_ok: popw %ds +# tell BIOS we want to go to long mode + movl $0xec00,%eax # declare target operating mode + movl $2,%ebx # long mode + int $0x15 + # Get memory size (extended mem, kB) xorl %eax, %eax diff -puN arch/x86_64/ia32/ipc32.c~x86_64-critical-fixes arch/x86_64/ia32/ipc32.c --- 25/arch/x86_64/ia32/ipc32.c~x86_64-critical-fixes 2003-07-10 18:47:11.000000000 -0700 +++ 25-akpm/arch/x86_64/ia32/ipc32.c 2003-07-10 18:47:11.000000000 -0700 @@ -271,7 +271,7 @@ semctl32 (int first, int second, int thi fourth.__pad = &s; old_fs = get_fs(); set_fs(KERNEL_DS); - err = sys_semctl(first, second, third|IPC_64, fourth); + err = sys_semctl(first, second, third, fourth); set_fs(old_fs); if (!err) err = put_semid((void *)A(pad), &s, version); @@ -396,7 +396,7 @@ msgctl32 (int first, int second, void *u case MSG_STAT: old_fs = get_fs(); set_fs(KERNEL_DS); - err = sys_msgctl(first, second|IPC_64, (void *) &m64); + err = sys_msgctl(first, second, (void *) &m64); set_fs(old_fs); if (version == IPC_64) { if (!access_ok(VERIFY_WRITE, up64, sizeof(*up64))) { @@ -529,7 +529,7 @@ shmctl32 (int first, int second, void *u case IPC_INFO: old_fs = get_fs(); set_fs(KERNEL_DS); - err = sys_shmctl(first, second|IPC_64, (struct shmid_ds *)&smi); + err = sys_shmctl(first, second, (struct shmid_ds *)&smi); set_fs(old_fs); if (version == IPC_64) { @@ -587,7 +587,7 @@ shmctl32 (int first, int second, void *u case SHM_STAT: old_fs = get_fs(); set_fs(KERNEL_DS); - err = sys_shmctl(first, second|IPC_64, (void *) &s64); + err = sys_shmctl(first, second, (void *) &s64); set_fs(old_fs); if (err < 0) diff -puN arch/x86_64/kernel/x8664_ksyms.c~x86_64-critical-fixes arch/x86_64/kernel/x8664_ksyms.c --- 25/arch/x86_64/kernel/x8664_ksyms.c~x86_64-critical-fixes 2003-07-10 18:47:11.000000000 -0700 +++ 25-akpm/arch/x86_64/kernel/x8664_ksyms.c 2003-07-10 18:47:11.000000000 -0700 @@ -214,5 +214,7 @@ EXPORT_SYMBOL(fake_node); EXPORT_SYMBOL(clear_page); +#ifdef CONFIG_SMP EXPORT_SYMBOL(flush_tlb_page); EXPORT_SYMBOL_GPL(flush_tlb_all); +#endif _