Commit 7721d3c2 authored by Al Viro's avatar Al Viro

alpha: simplify TIF_NEED_RESCHED handling

In case we have both NEED_RESCHED and SIGPENDING/NOTIFY_RESUME,
handle the latter first.  We'll get to original priorities in
the next commit, but now that allows to simplify the treatment
of NEED_RESCHED-only case nicely.  Namely, now there no need to
preserve the data for restarts across the call of schedule() in
$work_resched; we can get there only if we had either returned
from syscall without SIGPENDING (in which case we should've
had no restart-worthy return value and want no restarts) or
already got through do_notify_resume() call (in which case we
want no restarts anymore).  So we can just slap 0 into $19
instead of preserving it (and $20).
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 12f79be9
...@@ -372,26 +372,18 @@ $ret_success: ...@@ -372,26 +372,18 @@ $ret_success:
.align 4 .align 4
.ent work_pending .ent work_pending
work_pending: work_pending:
and $5, _TIF_NEED_RESCHED, $2 and $5, _TIF_NOTIFY_RESUME | _TIF_SIGPENDING, $2
beq $2, $work_notifysig bne $2, $work_notifysig
$work_resched: $work_resched:
subq $sp, 16, $sp /*
stq $19, 0($sp) /* save syscall nr */ * We can get here only if we returned from syscall without SIGPENDING
stq $20, 8($sp) /* and error indication (a3) */ * or got through work_notifysig already. Either case means no syscall
* restarts for us, so let $19 and $20 burn.
*/
jsr $26, schedule jsr $26, schedule
ldq $19, 0($sp) mov 0, $19
ldq $20, 8($sp) br ret_to_user
addq $sp, 16, $sp
/* Make sure need_resched and sigpending don't change between
sampling and the rti. */
lda $16, 7
call_pal PAL_swpipl
ldl $5, TI_FLAGS($8)
and $5, _TIF_WORK_MASK, $2
beq $2, restore_all
and $5, _TIF_NEED_RESCHED, $2
bne $2, $work_resched
$work_notifysig: $work_notifysig:
mov $sp, $16 mov $sp, $16
......
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