From 5ada03a92363fbcd94259a37507c183e6e29c48e Mon Sep 17 00:00:00 2001 From: Paul Mackerras Date: Sat, 15 Nov 2003 00:29:44 -0800 Subject: [PATCH] [PATCH] Fix ppc system restart properly 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 | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/arch/ppc/kernel/signal.c b/arch/ppc/kernel/signal.c index 8d7229485c652..f43d2ae01d9c1 100644 --- a/arch/ppc/kernel/signal.c +++ b/arch/ppc/kernel/signal.c @@ -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; -- 2.53.0