Commit 45111b53 authored by Al Viro's avatar Al Viro

mips: merge the identical "return from syscall" per-ABI code

No need to keep 4 copies of that stuff; merged and taken to
entry.S, unused public symbols there killed off.
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent f925725d
...@@ -77,7 +77,7 @@ FEXPORT(syscall_exit) ...@@ -77,7 +77,7 @@ FEXPORT(syscall_exit)
and t0, a2, t0 and t0, a2, t0
bnez t0, syscall_exit_work bnez t0, syscall_exit_work
FEXPORT(restore_all) # restore full frame restore_all: # restore full frame
#ifdef CONFIG_MIPS_MT_SMTC #ifdef CONFIG_MIPS_MT_SMTC
#ifdef CONFIG_MIPS_MT_SMTC_IM_BACKSTOP #ifdef CONFIG_MIPS_MT_SMTC_IM_BACKSTOP
/* Re-arm any temporarily masked interrupts not explicitly "acked" */ /* Re-arm any temporarily masked interrupts not explicitly "acked" */
...@@ -117,7 +117,7 @@ FEXPORT(restore_all) # restore full frame ...@@ -117,7 +117,7 @@ FEXPORT(restore_all) # restore full frame
RESTORE_TEMP RESTORE_TEMP
RESTORE_AT RESTORE_AT
RESTORE_STATIC RESTORE_STATIC
FEXPORT(restore_partial) # restore partial frame restore_partial: # restore partial frame
#ifdef CONFIG_TRACE_IRQFLAGS #ifdef CONFIG_TRACE_IRQFLAGS
SAVE_STATIC SAVE_STATIC
SAVE_AT SAVE_AT
...@@ -164,7 +164,13 @@ work_notifysig: # deal with pending signals and ...@@ -164,7 +164,13 @@ work_notifysig: # deal with pending signals and
jal do_notify_resume # a2 already loaded jal do_notify_resume # a2 already loaded
j resume_userspace j resume_userspace
FEXPORT(syscall_exit_work_partial) FEXPORT(syscall_exit_partial)
local_irq_disable # make sure need_resched doesn't
# change between and return
LONG_L a2, TI_FLAGS($28) # current->work
li t0, _TIF_ALLWORK_MASK
and t0, a2
beqz t0, restore_partial
SAVE_STATIC SAVE_STATIC
syscall_exit_work: syscall_exit_work:
LONG_L t0, PT_STATUS(sp) # returning to kernel mode? LONG_L t0, PT_STATUS(sp) # returning to kernel mode?
......
...@@ -69,18 +69,7 @@ stack_done: ...@@ -69,18 +69,7 @@ stack_done:
1: sw v0, PT_R2(sp) # result 1: sw v0, PT_R2(sp) # result
o32_syscall_exit: o32_syscall_exit:
local_irq_disable # make sure need_resched and j syscall_exit_partial
# signals dont change between
# sampling and return
lw a2, TI_FLAGS($28) # current->work
li t0, _TIF_ALLWORK_MASK
and t0, a2
bnez t0, o32_syscall_exit_work
j restore_partial
o32_syscall_exit_work:
j syscall_exit_work_partial
/* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */
......
...@@ -72,18 +72,7 @@ NESTED(handle_sys64, PT_SIZE, sp) ...@@ -72,18 +72,7 @@ NESTED(handle_sys64, PT_SIZE, sp)
1: sd v0, PT_R2(sp) # result 1: sd v0, PT_R2(sp) # result
n64_syscall_exit: n64_syscall_exit:
local_irq_disable # make sure need_resched and j syscall_exit_partial
# signals dont change between
# sampling and return
LONG_L a2, TI_FLAGS($28) # current->work
li t0, _TIF_ALLWORK_MASK
and t0, a2, t0
bnez t0, n64_syscall_exit_work
j restore_partial
n64_syscall_exit_work:
j syscall_exit_work_partial
/* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */
......
...@@ -70,18 +70,7 @@ NESTED(handle_sysn32, PT_SIZE, sp) ...@@ -70,18 +70,7 @@ NESTED(handle_sysn32, PT_SIZE, sp)
sd t1, PT_R0(sp) # save it for syscall restarting sd t1, PT_R0(sp) # save it for syscall restarting
1: sd v0, PT_R2(sp) # result 1: sd v0, PT_R2(sp) # result
local_irq_disable # make sure need_resched and j syscall_exit_partial
# signals dont change between
# sampling and return
LONG_L a2, TI_FLAGS($28) # current->work
li t0, _TIF_ALLWORK_MASK
and t0, a2, t0
bnez t0, n32_syscall_exit_work
j restore_partial
n32_syscall_exit_work:
j syscall_exit_work_partial
/* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */
......
...@@ -99,18 +99,7 @@ NESTED(handle_sys, PT_SIZE, sp) ...@@ -99,18 +99,7 @@ NESTED(handle_sys, PT_SIZE, sp)
1: sd v0, PT_R2(sp) # result 1: sd v0, PT_R2(sp) # result
o32_syscall_exit: o32_syscall_exit:
local_irq_disable # make need_resched and j syscall_exit_partial
# signals dont change between
# sampling and return
LONG_L a2, TI_FLAGS($28)
li t0, _TIF_ALLWORK_MASK
and t0, a2, t0
bnez t0, o32_syscall_exit_work
j restore_partial
o32_syscall_exit_work:
j syscall_exit_work_partial
/* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment