]> git.hungrycats.org Git - linux/commitdiff
[ARM] Fix system call restarting
authorRussell King <rmk@flint.arm.linux.org.uk>
Sun, 16 Nov 2003 09:40:05 +0000 (09:40 +0000)
committerRussell King <rmk@flint.arm.linux.org.uk>
Sun, 16 Nov 2003 09:40:05 +0000 (09:40 +0000)
Always disable system call restart when returning from a signal
handler.  This follows the new x86 behaviour.

arch/arm/kernel/signal.c

index 139603ee611f11481e703f01365d5d6a4a2a2aea..7787e498f1ac7e583d74f9c480510114a0381b1d 100644 (file)
@@ -187,6 +187,9 @@ asmlinkage int sys_sigreturn(struct pt_regs *regs)
        struct sigframe *frame;
        sigset_t set;
 
+       /* Always make any pending restarted system calls return -EINTR */
+       current_thread_info()->restart_block.fn = do_no_restart_syscall;
+
        /*
         * Since we stacked the signal on a 64-bit boundary,
         * then 'sp' should be word aligned here.  If it's
@@ -232,6 +235,9 @@ asmlinkage int sys_rt_sigreturn(struct pt_regs *regs)
        struct rt_sigframe *frame;
        sigset_t set;
 
+       /* Always make any pending restarted system calls return -EINTR */
+       current_thread_info()->restart_block.fn = do_no_restart_syscall;
+
        /*
         * Since we stacked the signal on a 64-bit boundary,
         * then 'sp' should be word aligned here.  If it's
@@ -462,8 +468,6 @@ handle_signal(unsigned long sig, siginfo_t *info, sigset_t *oldset,
        if (syscall) {
                switch (regs->ARM_r0) {
                case -ERESTART_RESTARTBLOCK:
-                       current_thread_info()->restart_block.fn =
-                               do_no_restart_syscall;
                case -ERESTARTNOHAND:
                        regs->ARM_r0 = -EINTR;
                        break;