|
@@ -608,18 +608,18 @@ ENTRY(ret_from_fork)
|
|
|
RESTORE_EXTRA_REGS
|
|
|
|
|
|
testl $3,CS(%rsp) # from kernel_thread?
|
|
|
- jz 1f
|
|
|
|
|
|
/*
|
|
|
* By the time we get here, we have no idea whether our pt_regs,
|
|
|
* ti flags, and ti status came from the 64-bit SYSCALL fast path,
|
|
|
* the slow path, or one of the ia32entry paths.
|
|
|
- * Use int_ret_from_sys_call to return, since it can safely handle
|
|
|
+ * Use IRET code path to return, since it can safely handle
|
|
|
* all of the above.
|
|
|
*/
|
|
|
- jmp int_ret_from_sys_call
|
|
|
+ jnz int_ret_from_sys_call
|
|
|
|
|
|
-1:
|
|
|
+ /* We came from kernel_thread */
|
|
|
+ /* nb: we depend on RESTORE_EXTRA_REGS above */
|
|
|
movq %rbp, %rdi
|
|
|
call *%rbx
|
|
|
movl $0, RAX(%rsp)
|