From 296f376f5073ecb5dd1b4769c123211ab0895e4b Mon Sep 17 00:00:00 2001 From: David Mosberger Date: Thu, 20 Nov 2003 22:08:13 -0800 Subject: [PATCH] ia64: From Linus/Paulus: reset restart_block function in restore_sigcontext(). Also update ia32 subsystem accordingly. --- arch/ia64/ia32/ia32_signal.c | 3 +++ arch/ia64/kernel/signal.c | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/arch/ia64/ia32/ia32_signal.c b/arch/ia64/ia32/ia32_signal.c index 82d929427b920..cec1ff13831d2 100644 --- a/arch/ia64/ia32/ia32_signal.c +++ b/arch/ia64/ia32/ia32_signal.c @@ -720,6 +720,9 @@ restore_sigcontext_ia32 (struct pt_regs *regs, struct sigcontext_ia32 *sc, int * { unsigned int err = 0; + /* Always make any pending restarted system calls return -EINTR */ + current_thread_info()->restart_block.fn = do_no_restart_syscall; + if (!access_ok(VERIFY_READ, sc, sizeof(*sc))) return(-EFAULT); diff --git a/arch/ia64/kernel/signal.c b/arch/ia64/kernel/signal.c index 8a5fe97969748..4f98194b431bd 100644 --- a/arch/ia64/kernel/signal.c +++ b/arch/ia64/kernel/signal.c @@ -115,6 +115,9 @@ restore_sigcontext (struct sigcontext *sc, struct sigscratch *scr) unsigned long ip, flags, nat, um, cfm; long err; + /* Always make any pending restarted system calls return -EINTR */ + current_thread_info()->restart_block.fn = do_no_restart_syscall; + /* restore scratch that always needs gets updated during signal delivery: */ err = __get_user(flags, &sc->sc_flags); err |= __get_user(nat, &sc->sc_nat); @@ -559,9 +562,6 @@ ia64_do_signal (sigset_t *oldset, struct sigscratch *scr, long in_syscall) ka = ¤t->sighand->action[signr - 1]; - /* Always make any pending restarted system calls return -EINTR */ - current_thread_info()->restart_block.fn = do_no_restart_syscall; - if (restart) { switch (errno) { case ERESTART_RESTARTBLOCK: -- 2.53.0