diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-09-06 00:30:34 +0200 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-10-12 03:39:27 +0200 |
commit | 6972d6f25d21e3da58ff1309256c787078405c7f (patch) | |
tree | 1492fa5424db7272573b2094522fc72f82974f40 /arch/alpha/kernel/entry.S | |
parent | alpha: simplify TIF_NEED_RESCHED handling (diff) | |
download | linux-6972d6f25d21e3da58ff1309256c787078405c7f.tar.xz linux-6972d6f25d21e3da58ff1309256c787078405c7f.zip |
alpha: take SIGPENDING/NOTIFY_RESUME loop into signal.c
Turn the slow side of work_pending into C function, including all
the looping. What we get out of that:
* we do _not_ call get_signal_to_deliver() with IRQs disabled
anymore
* no need to save/restore volatiles on each pass if there
turns to be more than one (unlikely, but still)
* all double-restart prevention is in C now.
* glue gets simpler.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/alpha/kernel/entry.S')
-rw-r--r-- | arch/alpha/kernel/entry.S | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/arch/alpha/kernel/entry.S b/arch/alpha/kernel/entry.S index 802108b15be8..0c30ccea9294 100644 --- a/arch/alpha/kernel/entry.S +++ b/arch/alpha/kernel/entry.S @@ -390,15 +390,9 @@ $work_notifysig: bsr $1, do_switch_stack mov $sp, $17 mov $5, $18 - mov $19, $9 /* save old syscall number */ - mov $20, $10 /* save old a3 */ - and $5, _TIF_SIGPENDING, $2 - cmovne $2, 0, $9 /* we don't want double syscall restarts */ - jsr $26, do_notify_resume - mov $9, $19 - mov $10, $20 + jsr $26, do_work_pending bsr $1, undo_switch_stack - br ret_to_user + br restore_all .end work_pending /* |