alpha: don't pass useless arguments to do_{,rt_},sigreturn()
authorAl Viro <viro@zeniv.linux.org.uk>
Thu, 18 Oct 2012 05:43:27 +0000 (01:43 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 29 Nov 2012 02:49:04 +0000 (21:49 -0500)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/alpha/kernel/entry.S
arch/alpha/kernel/signal.c

index cc6d34e9e2ea334601abf86c87103c8e0db3dc99..c245de65c61b91a697005ca3200e4632bb9fc337 100644 (file)
@@ -658,8 +658,6 @@ sys_sigreturn:
        .prologue 0
        lda     $9, ret_from_straced
        cmpult  $26, $9, $9
-       mov     $sp, $17
-       lda     $18, -SWITCH_STACK_SIZE($sp)
        lda     $sp, -SWITCH_STACK_SIZE($sp)
        jsr     $26, do_sigreturn
        bne     $9, 1f
@@ -675,8 +673,6 @@ sys_rt_sigreturn:
        .prologue 0
        lda     $9, ret_from_straced
        cmpult  $26, $9, $9
-       mov     $sp, $17
-       lda     $18, -SWITCH_STACK_SIZE($sp)
        lda     $sp, -SWITCH_STACK_SIZE($sp)
        jsr     $26, do_rt_sigreturn
        bne     $9, 1f
index 32575f85507d1a74d84198799dab405e07c94369..336393c9c11f507bb14897de9c3ab7c74fd8a0c3 100644 (file)
@@ -160,10 +160,10 @@ extern char compile_time_assert
 #define INSN_CALLSYS           0x00000083
 
 static long
-restore_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs,
-                  struct switch_stack *sw)
+restore_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs)
 {
        unsigned long usp;
+       struct switch_stack *sw = (struct switch_stack *)regs - 1;
        long i, err = __get_user(regs->pc, &sc->sc_pc);
 
        current_thread_info()->restart_block.fn = do_no_restart_syscall;
@@ -215,9 +215,9 @@ restore_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs,
    registers and transfer control from userland.  */
 
 asmlinkage void
-do_sigreturn(struct sigcontext __user *sc, struct pt_regs *regs,
-            struct switch_stack *sw)
+do_sigreturn(struct sigcontext __user *sc)
 {
+       struct pt_regs *regs = current_pt_regs();
        sigset_t set;
 
        /* Verify that it's a good sigcontext before using it */
@@ -228,7 +228,7 @@ do_sigreturn(struct sigcontext __user *sc, struct pt_regs *regs,
 
        set_current_blocked(&set);
 
-       if (restore_sigcontext(sc, regs, sw))
+       if (restore_sigcontext(sc, regs))
                goto give_sigsegv;
 
        /* Send SIGTRAP if we're single-stepping: */
@@ -249,9 +249,9 @@ give_sigsegv:
 }
 
 asmlinkage void
-do_rt_sigreturn(struct rt_sigframe __user *frame, struct pt_regs *regs,
-               struct switch_stack *sw)
+do_rt_sigreturn(struct rt_sigframe __user *frame)
 {
+       struct pt_regs *regs = current_pt_regs();
        sigset_t set;
 
        /* Verify that it's a good ucontext_t before using it */
@@ -262,7 +262,7 @@ do_rt_sigreturn(struct rt_sigframe __user *frame, struct pt_regs *regs,
 
        set_current_blocked(&set);
 
-       if (restore_sigcontext(&frame->uc.uc_mcontext, regs, sw))
+       if (restore_sigcontext(&frame->uc.uc_mcontext, regs))
                goto give_sigsegv;
 
        /* Send SIGTRAP if we're single-stepping: */