diff options
| author | Jeff Garzik <jeff@garzik.org> | 2006-02-27 11:49:05 -0500 |
|---|---|---|
| committer | Jeff Garzik <jeff@garzik.org> | 2006-02-27 11:49:05 -0500 |
| commit | cccc65a3b60edaf721cdee5a14f68ba009341822 (patch) | |
| tree | a458d28f70cbe0e848596aad6005442a2621d388 /arch/m32r/kernel/signal.c | |
| parent | ba70d0614728892b86b2be2f7eae0c696b436461 (diff) | |
| parent | e95a9ec1bb66e07b138861c743192f06e7b3e4de (diff) | |
Merge branch 'master'
Diffstat (limited to 'arch/m32r/kernel/signal.c')
| -rw-r--r-- | arch/m32r/kernel/signal.c | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/arch/m32r/kernel/signal.c b/arch/m32r/kernel/signal.c index 71763f7a1d19..cb33097fefc4 100644 --- a/arch/m32r/kernel/signal.c +++ b/arch/m32r/kernel/signal.c | |||
| @@ -36,7 +36,7 @@ int do_signal(struct pt_regs *, sigset_t *); | |||
| 36 | asmlinkage int | 36 | asmlinkage int |
| 37 | sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize, | 37 | sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize, |
| 38 | unsigned long r2, unsigned long r3, unsigned long r4, | 38 | unsigned long r2, unsigned long r3, unsigned long r4, |
| 39 | unsigned long r5, unsigned long r6, struct pt_regs regs) | 39 | unsigned long r5, unsigned long r6, struct pt_regs *regs) |
| 40 | { | 40 | { |
| 41 | sigset_t saveset, newset; | 41 | sigset_t saveset, newset; |
| 42 | 42 | ||
| @@ -54,21 +54,21 @@ sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize, | |||
| 54 | recalc_sigpending(); | 54 | recalc_sigpending(); |
| 55 | spin_unlock_irq(¤t->sighand->siglock); | 55 | spin_unlock_irq(¤t->sighand->siglock); |
| 56 | 56 | ||
| 57 | regs.r0 = -EINTR; | 57 | regs->r0 = -EINTR; |
| 58 | while (1) { | 58 | while (1) { |
| 59 | current->state = TASK_INTERRUPTIBLE; | 59 | current->state = TASK_INTERRUPTIBLE; |
| 60 | schedule(); | 60 | schedule(); |
| 61 | if (do_signal(®s, &saveset)) | 61 | if (do_signal(regs, &saveset)) |
| 62 | return regs.r0; | 62 | return regs->r0; |
| 63 | } | 63 | } |
| 64 | } | 64 | } |
| 65 | 65 | ||
| 66 | asmlinkage int | 66 | asmlinkage int |
| 67 | sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, | 67 | sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, |
| 68 | unsigned long r2, unsigned long r3, unsigned long r4, | 68 | unsigned long r2, unsigned long r3, unsigned long r4, |
| 69 | unsigned long r5, unsigned long r6, struct pt_regs regs) | 69 | unsigned long r5, unsigned long r6, struct pt_regs *regs) |
| 70 | { | 70 | { |
| 71 | return do_sigaltstack(uss, uoss, regs.spu); | 71 | return do_sigaltstack(uss, uoss, regs->spu); |
| 72 | } | 72 | } |
| 73 | 73 | ||
| 74 | 74 | ||
| @@ -140,11 +140,10 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, | |||
| 140 | asmlinkage int | 140 | asmlinkage int |
| 141 | sys_rt_sigreturn(unsigned long r0, unsigned long r1, | 141 | sys_rt_sigreturn(unsigned long r0, unsigned long r1, |
| 142 | unsigned long r2, unsigned long r3, unsigned long r4, | 142 | unsigned long r2, unsigned long r3, unsigned long r4, |
| 143 | unsigned long r5, unsigned long r6, struct pt_regs regs) | 143 | unsigned long r5, unsigned long r6, struct pt_regs *regs) |
| 144 | { | 144 | { |
| 145 | struct rt_sigframe __user *frame = (struct rt_sigframe __user *)regs.spu; | 145 | struct rt_sigframe __user *frame = (struct rt_sigframe __user *)regs->spu; |
| 146 | sigset_t set; | 146 | sigset_t set; |
| 147 | stack_t st; | ||
| 148 | int result; | 147 | int result; |
| 149 | 148 | ||
| 150 | if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) | 149 | if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) |
| @@ -158,14 +157,11 @@ sys_rt_sigreturn(unsigned long r0, unsigned long r1, | |||
| 158 | recalc_sigpending(); | 157 | recalc_sigpending(); |
| 159 | spin_unlock_irq(¤t->sighand->siglock); | 158 | spin_unlock_irq(¤t->sighand->siglock); |
| 160 | 159 | ||
| 161 | if (restore_sigcontext(®s, &frame->uc.uc_mcontext, &result)) | 160 | if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &result)) |
| 162 | goto badframe; | 161 | goto badframe; |
| 163 | 162 | ||
| 164 | if (__copy_from_user(&st, &frame->uc.uc_stack, sizeof(st))) | 163 | if (do_sigaltstack(&frame->uc.uc_stack, NULL, regs->spu) == -EFAULT) |
| 165 | goto badframe; | 164 | goto badframe; |
| 166 | /* It is more difficult to avoid calling this function than to | ||
| 167 | call it and ignore errors. */ | ||
| 168 | do_sigaltstack(&st, NULL, regs.spu); | ||
| 169 | 165 | ||
| 170 | return result; | 166 | return result; |
| 171 | 167 | ||
