mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-23 20:24:12 +08:00
[PATCH] x86_64: Call do_notify_resume unconditionally in entry.S
This removes some unnecessary code in the assembly files. Matches i386 behaviour. In addition don't clear the work check mask after work has been done. This fixes some theoretical signal/other event losses. Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
36c1104e30
commit
11b854b2f1
@ -197,7 +197,7 @@ ENTRY(system_call)
|
||||
*/
|
||||
.globl ret_from_sys_call
|
||||
ret_from_sys_call:
|
||||
movl $_TIF_WORK_MASK,%edi
|
||||
movl $_TIF_ALLWORK_MASK,%edi
|
||||
/* edi: flagmask */
|
||||
sysret_check:
|
||||
GET_THREAD_INFO(%rcx)
|
||||
@ -223,18 +223,13 @@ sysret_careful:
|
||||
jmp sysret_check
|
||||
|
||||
/* Handle a signal */
|
||||
/* edx: work flags (arg3) */
|
||||
sysret_signal:
|
||||
sti
|
||||
testl $(_TIF_SIGPENDING|_TIF_NOTIFY_RESUME|_TIF_SINGLESTEP),%edx
|
||||
jz 1f
|
||||
|
||||
/* Really a signal */
|
||||
/* edx: work flags (arg3) */
|
||||
leaq do_notify_resume(%rip),%rax
|
||||
leaq -ARGOFFSET(%rsp),%rdi # &pt_regs -> arg1
|
||||
xorl %esi,%esi # oldset -> arg2
|
||||
call ptregscall_common
|
||||
1: movl $_TIF_NEED_RESCHED,%edi
|
||||
jmp sysret_check
|
||||
|
||||
/* Do syscall tracing */
|
||||
@ -490,8 +485,6 @@ retint_careful:
|
||||
jmp retint_check
|
||||
|
||||
retint_signal:
|
||||
testl $(_TIF_SIGPENDING|_TIF_NOTIFY_RESUME|_TIF_SINGLESTEP),%edx
|
||||
jz retint_swapgs
|
||||
sti
|
||||
SAVE_REST
|
||||
movq $-1,ORIG_RAX(%rsp)
|
||||
@ -500,7 +493,6 @@ retint_signal:
|
||||
call do_notify_resume
|
||||
RESTORE_REST
|
||||
cli
|
||||
movl $_TIF_NEED_RESCHED,%edi
|
||||
GET_THREAD_INFO(%rcx)
|
||||
jmp retint_check
|
||||
|
||||
@ -829,21 +821,19 @@ paranoid_userspace:
|
||||
cli
|
||||
GET_THREAD_INFO(%rcx)
|
||||
movl threadinfo_flags(%rcx),%edx
|
||||
testl $_TIF_WORK_MASK,%edx
|
||||
jz paranoid_swapgs
|
||||
testl $_TIF_NEED_RESCHED,%edx
|
||||
jnz paranoid_resched
|
||||
testl $(_TIF_SIGPENDING|_TIF_NOTIFY_RESUME|_TIF_SINGLESTEP),%edx
|
||||
jnz paranoid_signal
|
||||
jmp paranoid_swapgs
|
||||
paranoid_resched:
|
||||
sti
|
||||
call schedule
|
||||
jmp paranoid_exit
|
||||
paranoid_signal:
|
||||
sti
|
||||
xorl %esi,%esi /* oldset */
|
||||
movq %rsp,%rdi /* &pt_regs */
|
||||
call do_notify_resume
|
||||
jmp paranoid_exit
|
||||
paranoid_resched:
|
||||
sti
|
||||
call schedule
|
||||
jmp paranoid_exit
|
||||
CFI_ENDPROC
|
||||
|
||||
ENTRY(int3)
|
||||
|
Loading…
Reference in New Issue
Block a user