Merge branch 'master' of /usr/src/ntfs-2.6/
[sfrench/cifs-2.6.git] / arch / mips / kernel / signal32.c
index 806ed073e54d1006be4c36683b66c2d92ce64dcf..98b185bbc947c0576851787a78836927f5b9d65e 100644 (file)
@@ -497,8 +497,6 @@ _sys32_sigreturn(nabi_no_regargs struct pt_regs regs)
        /*
         * Don't let your children do this ...
         */
-       if (current_thread_info()->flags & TIF_SYSCALL_TRACE)
-               do_syscall_trace(&regs, 1);
        __asm__ __volatile__(
                "move\t$29, %0\n\t"
                "j\tsyscall_exit"
@@ -590,7 +588,7 @@ static inline int setup_sigcontext32(struct pt_regs *regs,
        err |= __put_user(regs->hi, &sc->sc_mdhi);
        err |= __put_user(regs->lo, &sc->sc_mdlo);
        if (cpu_has_dsp) {
-               err |= __put_user(rddsp(DSP_MASK), &sc->sc_hi1);
+               err |= __put_user(rddsp(DSP_MASK), &sc->sc_dsp);
                err |= __put_user(mfhi1(), &sc->sc_hi1);
                err |= __put_user(mflo1(), &sc->sc_lo1);
                err |= __put_user(mfhi2(), &sc->sc_hi2);
@@ -647,8 +645,8 @@ static inline void *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
        return (void *)((sp - frame_size) & ALMASK);
 }
 
-void setup_frame_32(struct k_sigaction * ka, struct pt_regs *regs,
-                              int signr, sigset_t *set)
+int setup_frame_32(struct k_sigaction * ka, struct pt_regs *regs,
+       int signr, sigset_t *set)
 {
        struct sigframe *frame;
        int err = 0;
@@ -694,13 +692,15 @@ void setup_frame_32(struct k_sigaction * ka, struct pt_regs *regs,
               current->comm, current->pid,
               frame, regs->cp0_epc, frame->sf_code);
 #endif
-        return;
+       return 1;
 
 give_sigsegv:
        force_sigsegv(signr, current);
+       return 0;
 }
 
-void setup_rt_frame_32(struct k_sigaction * ka, struct pt_regs *regs, int signr,       sigset_t *set, siginfo_t *info)
+int setup_rt_frame_32(struct k_sigaction * ka, struct pt_regs *regs,
+       int signr, sigset_t *set, siginfo_t *info)
 {
        struct rt_sigframe32 *frame;
        int err = 0;
@@ -763,15 +763,18 @@ void setup_rt_frame_32(struct k_sigaction * ka, struct pt_regs *regs, int signr,
               current->comm, current->pid,
               frame, regs->cp0_epc, frame->rs_code);
 #endif
-       return;
+       return 1;
 
 give_sigsegv:
        force_sigsegv(signr, current);
+       return 0;
 }
 
-static inline void handle_signal(unsigned long sig, siginfo_t *info,
+static inline int handle_signal(unsigned long sig, siginfo_t *info,
        struct k_sigaction *ka, sigset_t *oldset, struct pt_regs * regs)
 {
+       int ret;
+
        switch (regs->regs[0]) {
        case ERESTART_RESTARTBLOCK:
        case ERESTARTNOHAND:
@@ -791,9 +794,9 @@ static inline void handle_signal(unsigned long sig, siginfo_t *info,
        regs->regs[0] = 0;              /* Don't deal with this again.  */
 
        if (ka->sa.sa_flags & SA_SIGINFO)
-               current->thread.abi->setup_rt_frame(ka, regs, sig, oldset, info);
+               ret = current->thread.abi->setup_rt_frame(ka, regs, sig, oldset, info);
        else
-               current->thread.abi->setup_frame(ka, regs, sig, oldset);
+               ret = current->thread.abi->setup_frame(ka, regs, sig, oldset);
 
        spin_lock_irq(&current->sighand->siglock);
        sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
@@ -801,6 +804,8 @@ static inline void handle_signal(unsigned long sig, siginfo_t *info,
                sigaddset(&current->blocked,sig);
        recalc_sigpending();
        spin_unlock_irq(&current->sighand->siglock);
+
+       return ret;
 }
 
 int do_signal32(sigset_t *oldset, struct pt_regs *regs)
@@ -824,10 +829,8 @@ int do_signal32(sigset_t *oldset, struct pt_regs *regs)
                oldset = &current->blocked;
 
        signr = get_signal_to_deliver(&info, &ka, regs, NULL);
-       if (signr > 0) {
-               handle_signal(signr, &info, &ka, oldset, regs);
-               return 1;
-       }
+       if (signr > 0)
+               return handle_signal(signr, &info, &ka, oldset, regs);
 
 no_signal:
        /*