diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-11-27 21:54:08 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-11-27 21:54:08 -0500 |
commit | 5e6ddf9aaa0f2b16fc503626c70bb19832b22b8b (patch) | |
tree | 87d6b6e2d3e5a8787874aa76cefeee5c06605eb0 /arch/m32r/kernel/signal.c | |
parent | 7749c902592f610dc448830210174ab922f54be9 (diff) | |
parent | c37a33035720a0faf1f609dc7c2c07080ed83629 (diff) |
Merge branch 'for-linus' of git://www.linux-m32r.org/git/takata/linux-2.6_dev
* 'for-linus' of git://www.linux-m32r.org/git/takata/linux-2.6_dev:
m32r: Update sys_rt_sigsuspend
m32r: Ignore warnings for unused syscalls
m32r: Add missing syscalls
Diffstat (limited to 'arch/m32r/kernel/signal.c')
-rw-r--r-- | arch/m32r/kernel/signal.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/arch/m32r/kernel/signal.c b/arch/m32r/kernel/signal.c index a753d79c4e89..18124542a6eb 100644 --- a/arch/m32r/kernel/signal.c +++ b/arch/m32r/kernel/signal.c | |||
@@ -36,7 +36,7 @@ sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize, | |||
36 | unsigned long r2, unsigned long r3, unsigned long r4, | 36 | unsigned long r2, unsigned long r3, unsigned long r4, |
37 | unsigned long r5, unsigned long r6, struct pt_regs *regs) | 37 | unsigned long r5, unsigned long r6, struct pt_regs *regs) |
38 | { | 38 | { |
39 | sigset_t saveset, newset; | 39 | sigset_t newset; |
40 | 40 | ||
41 | /* XXX: Don't preclude handling different sized sigset_t's. */ | 41 | /* XXX: Don't preclude handling different sized sigset_t's. */ |
42 | if (sigsetsize != sizeof(sigset_t)) | 42 | if (sigsetsize != sizeof(sigset_t)) |
@@ -44,21 +44,18 @@ sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize, | |||
44 | 44 | ||
45 | if (copy_from_user(&newset, unewset, sizeof(newset))) | 45 | if (copy_from_user(&newset, unewset, sizeof(newset))) |
46 | return -EFAULT; | 46 | return -EFAULT; |
47 | sigdelsetmask(&newset, ~_BLOCKABLE); | 47 | sigdelsetmask(&newset, sigmask(SIGKILL)|sigmask(SIGSTOP)); |
48 | 48 | ||
49 | spin_lock_irq(¤t->sighand->siglock); | 49 | spin_lock_irq(¤t->sighand->siglock); |
50 | saveset = current->blocked; | 50 | current->saved_sigmask = current->blocked; |
51 | current->blocked = newset; | 51 | current->blocked = newset; |
52 | recalc_sigpending(); | 52 | recalc_sigpending(); |
53 | spin_unlock_irq(¤t->sighand->siglock); | 53 | spin_unlock_irq(¤t->sighand->siglock); |
54 | 54 | ||
55 | regs->r0 = -EINTR; | 55 | current->state = TASK_INTERRUPTIBLE; |
56 | while (1) { | 56 | schedule(); |
57 | current->state = TASK_INTERRUPTIBLE; | 57 | set_thread_flag(TIF_RESTORE_SIGMASK); |
58 | schedule(); | 58 | return -ERESTARTNOHAND; |
59 | if (do_signal(regs, &saveset)) | ||
60 | return regs->r0; | ||
61 | } | ||
62 | } | 59 | } |
63 | 60 | ||
64 | asmlinkage int | 61 | asmlinkage int |