summaryrefslogtreecommitdiffstats
path: root/arch/m68knommu/kernel/signal.c
diff options
context:
space:
mode:
authorFelix Blyakher <felixb@sgi.com>2009-02-03 17:38:41 +0100
committerFelix Blyakher <felixb@sgi.com>2009-02-03 17:38:41 +0100
commit6d2160bfe7826aca1c94b4bca77093908a452ae7 (patch)
tree8153fcd8a7c467e5de136f312e8ef5b27bea9d6b /arch/m68knommu/kernel/signal.c
parentdon't reallocate sxp variable passed into xfs_swapext (diff)
parentMerge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jba... (diff)
downloadlinux-6d2160bfe7826aca1c94b4bca77093908a452ae7.tar.xz
linux-6d2160bfe7826aca1c94b4bca77093908a452ae7.zip
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 into for-linus
Diffstat (limited to 'arch/m68knommu/kernel/signal.c')
-rw-r--r--arch/m68knommu/kernel/signal.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/arch/m68knommu/kernel/signal.c b/arch/m68knommu/kernel/signal.c
index bbfcae9e52b4..5ab6a04af14e 100644
--- a/arch/m68knommu/kernel/signal.c
+++ b/arch/m68knommu/kernel/signal.c
@@ -279,6 +279,9 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext *usc, void *fp,
struct sigcontext context;
int err = 0;
+ /* Always make any pending restarted system calls return -EINTR */
+ current_thread_info()->restart_block.fn = do_no_restart_syscall;
+
/* get previous context */
if (copy_from_user(&context, usc, sizeof(context)))
goto badframe;
@@ -316,6 +319,9 @@ rt_restore_ucontext(struct pt_regs *regs, struct switch_stack *sw,
unsigned long usp;
int err;
+ /* Always make any pending restarted system calls return -EINTR */
+ current_thread_info()->restart_block.fn = do_no_restart_syscall;
+
err = __get_user(temp, &uc->uc_mcontext.version);
if (temp != MCONTEXT_VERSION)
goto badframe;
@@ -692,6 +698,15 @@ handle_restart(struct pt_regs *regs, struct k_sigaction *ka, int has_handler)
regs->d0 = -EINTR;
break;
+ case -ERESTART_RESTARTBLOCK:
+ if (!has_handler) {
+ regs->d0 = __NR_restart_syscall;
+ regs->pc -= 2;
+ break;
+ }
+ regs->d0 = -EINTR;
+ break;
+
case -ERESTARTSYS:
if (has_handler && !(ka->sa.sa_flags & SA_RESTART)) {
regs->d0 = -EINTR;