x86: ret_from_fork - get rid of jump back
Impact: remove dead code If we take a closer look at the rff_trace/rff_action ret_from_fork code, we have to realize that it does all the wrong things: for example it checks the TIF flag - while later on jumping back to the ret-from-syscall path - duplicating the check needlessly. But checking for _TIF_SYSCALL_TRACE is completely unnecessary here because we clear that flag for every freshly forked task. So the whole "tracing" code here, for which there is a out of line jump optimization that makes it even harder to read, is in reality completely dead code ... Reported-by: Cyrill Gorcunov <gorcunov@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu> Tested-by: Cyrill Gorcunov <gorcunov@gmail.com>
This commit is contained in:
Родитель
3bdae4f464
Коммит
5b3eec0c80
|
@ -361,34 +361,35 @@ ENTRY(save_paranoid)
|
|||
END(save_paranoid)
|
||||
|
||||
/*
|
||||
* A newly forked process directly context switches into this.
|
||||
* A newly forked process directly context switches into this address.
|
||||
*
|
||||
* rdi: prev task we switched from
|
||||
*/
|
||||
/* rdi: prev */
|
||||
ENTRY(ret_from_fork)
|
||||
DEFAULT_FRAME
|
||||
|
||||
push kernel_eflags(%rip)
|
||||
CFI_ADJUST_CFA_OFFSET 8
|
||||
popf # reset kernel eflags
|
||||
popf # reset kernel eflags
|
||||
CFI_ADJUST_CFA_OFFSET -8
|
||||
call schedule_tail
|
||||
|
||||
call schedule_tail # rdi: 'prev' task parameter
|
||||
|
||||
GET_THREAD_INFO(%rcx)
|
||||
testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT),TI_flags(%rcx)
|
||||
|
||||
CFI_REMEMBER_STATE
|
||||
jnz rff_trace
|
||||
rff_action:
|
||||
RESTORE_REST
|
||||
testl $3,CS-ARGOFFSET(%rsp) # from kernel_thread?
|
||||
|
||||
testl $3, CS-ARGOFFSET(%rsp) # from kernel_thread?
|
||||
je int_ret_from_sys_call
|
||||
testl $_TIF_IA32,TI_flags(%rcx)
|
||||
|
||||
testl $_TIF_IA32, TI_flags(%rcx) # 32-bit compat task needs IRET
|
||||
jnz int_ret_from_sys_call
|
||||
|
||||
RESTORE_TOP_OF_STACK %rdi, -ARGOFFSET
|
||||
jmp ret_from_sys_call
|
||||
jmp ret_from_sys_call # go to the SYSRET fastpath
|
||||
|
||||
CFI_RESTORE_STATE
|
||||
rff_trace:
|
||||
movq %rsp,%rdi
|
||||
call syscall_trace_leave
|
||||
GET_THREAD_INFO(%rcx)
|
||||
jmp rff_action
|
||||
CFI_ENDPROC
|
||||
END(ret_from_fork)
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче