alpha: get rid of switch_stack argument of do_work_pending()
... and now the asm glue side of that. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
d9d0738a89
commit
cb450766bc
|
@ -311,7 +311,7 @@ entSys:
|
|||
|
||||
.align 4
|
||||
ret_from_sys_call:
|
||||
cmovne $26, 0, $19 /* $19 = 0 => non-restartable */
|
||||
cmovne $26, 0, $18 /* $18 = 0 => non-restartable */
|
||||
ldq $0, SP_OFF($sp)
|
||||
and $0, 8, $0
|
||||
beq $0, ret_to_kernel
|
||||
|
@ -320,8 +320,8 @@ ret_to_user:
|
|||
sampling and the rti. */
|
||||
lda $16, 7
|
||||
call_pal PAL_swpipl
|
||||
ldl $5, TI_FLAGS($8)
|
||||
and $5, _TIF_WORK_MASK, $2
|
||||
ldl $17, TI_FLAGS($8)
|
||||
and $17, _TIF_WORK_MASK, $2
|
||||
bne $2, work_pending
|
||||
restore_all:
|
||||
RESTORE_ALL
|
||||
|
@ -341,10 +341,10 @@ $syscall_error:
|
|||
* frame to indicate that a negative return value wasn't an
|
||||
* error number..
|
||||
*/
|
||||
ldq $19, 0($sp) /* old syscall nr (zero if success) */
|
||||
beq $19, $ret_success
|
||||
ldq $18, 0($sp) /* old syscall nr (zero if success) */
|
||||
beq $18, $ret_success
|
||||
|
||||
ldq $20, 72($sp) /* .. and this a3 */
|
||||
ldq $19, 72($sp) /* .. and this a3 */
|
||||
subq $31, $0, $0 /* with error in v0 */
|
||||
addq $31, 1, $1 /* set a3 for errno return */
|
||||
stq $0, 0($sp)
|
||||
|
@ -362,34 +362,32 @@ $ret_success:
|
|||
* Do all cleanup when returning from all interrupts and system calls.
|
||||
*
|
||||
* Arguments:
|
||||
* $5: TI_FLAGS.
|
||||
* $8: current.
|
||||
* $19: The old syscall number, or zero if this is not a return
|
||||
* $17: TI_FLAGS.
|
||||
* $18: The old syscall number, or zero if this is not a return
|
||||
* from a syscall that errored and is possibly restartable.
|
||||
* $20: The old a3 value
|
||||
* $19: The old a3 value
|
||||
*/
|
||||
|
||||
.align 4
|
||||
.ent work_pending
|
||||
work_pending:
|
||||
and $5, _TIF_NOTIFY_RESUME | _TIF_SIGPENDING, $2
|
||||
and $17, _TIF_NOTIFY_RESUME | _TIF_SIGPENDING, $2
|
||||
bne $2, $work_notifysig
|
||||
|
||||
$work_resched:
|
||||
/*
|
||||
* We can get here only if we returned from syscall without SIGPENDING
|
||||
* or got through work_notifysig already. Either case means no syscall
|
||||
* restarts for us, so let $19 and $20 burn.
|
||||
* restarts for us, so let $18 and $19 burn.
|
||||
*/
|
||||
jsr $26, schedule
|
||||
mov 0, $19
|
||||
mov 0, $18
|
||||
br ret_to_user
|
||||
|
||||
$work_notifysig:
|
||||
mov $sp, $16
|
||||
bsr $1, do_switch_stack
|
||||
mov $sp, $17
|
||||
mov $5, $18
|
||||
jsr $26, do_work_pending
|
||||
bsr $1, undo_switch_stack
|
||||
br restore_all
|
||||
|
@ -440,9 +438,9 @@ $strace_success:
|
|||
|
||||
.align 3
|
||||
$strace_error:
|
||||
ldq $19, 0($sp) /* old syscall nr (zero if success) */
|
||||
beq $19, $strace_success
|
||||
ldq $20, 72($sp) /* .. and this a3 */
|
||||
ldq $18, 0($sp) /* old syscall nr (zero if success) */
|
||||
beq $18, $strace_success
|
||||
ldq $19, 72($sp) /* .. and this a3 */
|
||||
|
||||
subq $31, $0, $0 /* with error in v0 */
|
||||
addq $31, 1, $1 /* set a3 for errno return */
|
||||
|
@ -450,11 +448,11 @@ $strace_error:
|
|||
stq $1, 72($sp) /* a3 for return */
|
||||
|
||||
bsr $1, do_switch_stack
|
||||
mov $19, $9 /* save old syscall number */
|
||||
mov $20, $10 /* save old a3 */
|
||||
mov $18, $9 /* save old syscall number */
|
||||
mov $19, $10 /* save old a3 */
|
||||
jsr $26, syscall_trace_leave
|
||||
mov $9, $19
|
||||
mov $10, $20
|
||||
mov $9, $18
|
||||
mov $10, $19
|
||||
bsr $1, undo_switch_stack
|
||||
|
||||
mov $31, $26 /* tell "ret_from_sys_call" we can restart */
|
||||
|
|
|
@ -568,8 +568,7 @@ do_signal(struct pt_regs *regs, unsigned long r0, unsigned long r19)
|
|||
}
|
||||
|
||||
void
|
||||
do_work_pending(struct pt_regs *regs, struct switch_stack *unused,
|
||||
unsigned long thread_flags,
|
||||
do_work_pending(struct pt_regs *regs, unsigned long thread_flags,
|
||||
unsigned long r0, unsigned long r19)
|
||||
{
|
||||
do {
|
||||
|
|
Loading…
Reference in a new issue