Merge branch 'upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/floppy...
[linux-drm-fsl-dcu.git] / arch / s390 / kernel / compat_signal.c
index 28040fd5e8a2232f39893545938590aaffa20315..3c0c19830c37f5a0f7896d0a292762b794b30a74 100644 (file)
@@ -32,8 +32,6 @@
 #include "compat_ptrace.h"
 #include "entry.h"
 
-#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
-
 typedef struct 
 {
        __u8 callee_used_stack[__SIGNAL_FRAMESIZE32];
@@ -364,7 +362,6 @@ asmlinkage long sys32_sigreturn(void)
                goto badframe;
        if (__copy_from_user(&set.sig, &frame->sc.oldmask, _SIGMASK_COPY_SIZE32))
                goto badframe;
-       sigdelsetmask(&set, ~_BLOCKABLE);
        set_current_blocked(&set);
        if (restore_sigregs32(regs, &frame->sregs))
                goto badframe;
@@ -390,7 +387,6 @@ asmlinkage long sys32_rt_sigreturn(void)
                goto badframe;
        if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
                goto badframe;
-       sigdelsetmask(&set, ~_BLOCKABLE);
        set_current_blocked(&set);
        if (restore_sigregs32(regs, &frame->uc.uc_mcontext))
                goto badframe;
@@ -437,13 +433,6 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size)
                        sp = current->sas_ss_sp + current->sas_ss_size;
        }
 
-       /* This is the legacy signal stack switching. */
-       else if (!user_mode(regs) &&
-                !(ka->sa.sa_flags & SA_RESTORER) &&
-                ka->sa.sa_restorer) {
-               sp = (unsigned long) ka->sa.sa_restorer;
-       }
-
        return (void __user *)((sp - frame_size) & -8ul);
 }
 
@@ -579,7 +568,7 @@ give_sigsegv:
  * OK, we're invoking a handler
  */    
 
-int handle_signal32(unsigned long sig, struct k_sigaction *ka,
+void handle_signal32(unsigned long sig, struct k_sigaction *ka,
                    siginfo_t *info, sigset_t *oldset, struct pt_regs *regs)
 {
        int ret;
@@ -590,8 +579,8 @@ int handle_signal32(unsigned long sig, struct k_sigaction *ka,
        else
                ret = setup_frame32(sig, ka, oldset, regs);
        if (ret)
-               return ret;
-       block_sigmask(ka, sig);
-       return 0;
+               return;
+       signal_delivered(sig, info, ka, regs,
+                                test_thread_flag(TIF_SINGLE_STEP));
 }