diff options
author | Al Viro | 2012-09-10 22:44:54 +0200 |
---|---|---|
committer | Al Viro | 2012-10-01 04:53:31 +0200 |
commit | 7076aada1040de4ed79a5977dbabdb5e5ea5e249 (patch) | |
tree | dfcf480d21cd714a1cc42f38417c427d06526f5a /arch/x86/kernel/entry_32.S | |
parent | alpha: introduce ret_from_kernel_execve(), switch to generic kernel_execve() (diff) | |
download | kernel-qcow2-linux-7076aada1040de4ed79a5977dbabdb5e5ea5e249.tar.gz kernel-qcow2-linux-7076aada1040de4ed79a5977dbabdb5e5ea5e249.tar.xz kernel-qcow2-linux-7076aada1040de4ed79a5977dbabdb5e5ea5e249.zip |
x86: split ret_from_fork
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/x86/kernel/entry_32.S')
-rw-r--r-- | arch/x86/kernel/entry_32.S | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S index 623f28837476..ac1107346fc9 100644 --- a/arch/x86/kernel/entry_32.S +++ b/arch/x86/kernel/entry_32.S @@ -994,15 +994,20 @@ END(spurious_interrupt_bug) */ .popsection -ENTRY(kernel_thread_helper) - pushl $0 # fake return address for unwinder +ENTRY(ret_from_kernel_thread) CFI_STARTPROC - movl %edi,%eax - call *%esi + pushl_cfi %eax + call schedule_tail + GET_THREAD_INFO(%ebp) + popl_cfi %eax + pushl_cfi $0x0202 # Reset kernel eflags + popfl_cfi + movl PT_EBP(%esp),%eax + call *PT_EBX(%esp) call do_exit ud2 # padding for call trace CFI_ENDPROC -ENDPROC(kernel_thread_helper) +ENDPROC(ret_from_kernel_thread) #ifdef CONFIG_XEN /* Xen doesn't set %esp to be precisely what the normal sysenter |