diff -Nraup linux-2.6.12-rc4/arch/x86_64/kernel/signal.c linux-2.6.12-rc4_fix/arch/x86_64/kernel/signal.c --- linux-2.6.12-rc4/arch/x86_64/kernel/signal.c 2005-05-12 22:19:40.000000000 -0700 +++ linux-2.6.12-rc4_fix/arch/x86_64/kernel/signal.c 2005-05-18 09:57:00.000000000 -0700 @@ -452,7 +452,10 @@ int do_signal(struct pt_regs *regs, sigs regs->rip -= 2; } if (regs->rax == (unsigned long)-ERESTART_RESTARTBLOCK) { - regs->rax = __NR_restart_syscall; + if (test_thread_flag(TIF_IA32)) + regs->rax = __NR_ia32_restart_syscall; + else + regs->rax = __NR_restart_syscall; regs->rip -= 2; } }