]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] Fix ppc system restart properly
authorPaul Mackerras <paulus@samba.org>
Sat, 15 Nov 2003 08:29:44 +0000 (00:29 -0800)
committerLinus Torvalds <torvalds@home.osdl.org>
Sat, 15 Nov 2003 08:29:44 +0000 (00:29 -0800)
We're actually much better off resetting system call restart at signal
return.

This makes all other resets unnecessary.

Here's the ppc version of it.

arch/ppc/kernel/signal.c

index 8d7229485c6529efa391ef3123f09fc19cc5db5d..f43d2ae01d9c1b0bf327d2ddf51846ae78a09e48 100644 (file)
@@ -418,6 +418,9 @@ int sys_rt_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8,
 {
        struct rt_sigframe __user *rt_sf;
 
+       /* Always make any pending restarted system calls return -EINTR */
+       current_thread_info()->restart_block.fn = do_no_restart_syscall;
+
        rt_sf = (struct rt_sigframe __user *)
                (regs->gpr[1] + __SIGNAL_FRAMESIZE + 16);
        if (verify_area(VERIFY_READ, rt_sf, sizeof(struct rt_sigframe)))
@@ -513,6 +516,9 @@ int sys_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8,
        struct mcontext __user *sr;
        sigset_t set;
 
+       /* Always make any pending restarted system calls return -EINTR */
+       current_thread_info()->restart_block.fn = do_no_restart_syscall;
+
        sc = (struct sigcontext __user *)(regs->gpr[1] + __SIGNAL_FRAMESIZE);
        if (copy_from_user(&sigctx, sc, sizeof(sigctx)))
                goto badframe;
@@ -583,9 +589,6 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs)
        if (signr == 0)
                return 0;               /* no signals delivered */
 
-       /* Always make any pending restarted system calls return -EINTR */
-       current_thread_info()->restart_block.fn = do_no_restart_syscall;
-
        if ((ka->sa.sa_flags & SA_ONSTACK) && current->sas_ss_size
            && !on_sig_stack(regs->gpr[1]))
                newsp = current->sas_ss_sp + current->sas_ss_size;