aboutsummaryrefslogtreecommitdiffstats
path: root/arch/m32r/kernel
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2010-09-24 01:22:30 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2010-09-24 16:54:19 -0400
commita748102430f4dbbfca3ff81ac12db6e4f1243677 (patch)
tree0d71112ed450bd82d8656fcbdd0b4cc4fb2b68a8 /arch/m32r/kernel
parenta7f8388e2c167c73b6abb3b749157aafd08f90ee (diff)
make m32r handle multiple pending signals
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/m32r/kernel')
-rw-r--r--arch/m32r/kernel/entry.S4
-rw-r--r--arch/m32r/kernel/signal.c6
2 files changed, 6 insertions, 4 deletions
diff --git a/arch/m32r/kernel/entry.S b/arch/m32r/kernel/entry.S
index 90149daa560f..225412bc227e 100644
--- a/arch/m32r/kernel/entry.S
+++ b/arch/m32r/kernel/entry.S
@@ -235,9 +235,9 @@ work_resched:
235work_notifysig: ; deal with pending signals and 235work_notifysig: ; deal with pending signals and
236 ; notify-resume requests 236 ; notify-resume requests
237 mv r0, sp ; arg1 : struct pt_regs *regs 237 mv r0, sp ; arg1 : struct pt_regs *regs
238 ldi r1, r9 ; arg2 : __u32 thread_info_flags 238 mv r1, r9 ; arg2 : __u32 thread_info_flags
239 bl do_notify_resume 239 bl do_notify_resume
240 bra restore_all 240 bra resume_userspace
241 241
242 ; perform syscall exit tracing 242 ; perform syscall exit tracing
243 ALIGN 243 ALIGN
diff --git a/arch/m32r/kernel/signal.c b/arch/m32r/kernel/signal.c
index acd69f7f3357..db152263484f 100644
--- a/arch/m32r/kernel/signal.c
+++ b/arch/m32r/kernel/signal.c
@@ -282,6 +282,7 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info,
282 regs->bpc -= 2; 282 regs->bpc -= 2;
283 else 283 else
284 regs->bpc -= 4; 284 regs->bpc -= 4;
285 regs->syscall_nr = -1;
285 } 286 }
286 } 287 }
287 288
@@ -353,8 +354,8 @@ static int do_signal(struct pt_regs *regs)
353 regs->bpc -= 2; 354 regs->bpc -= 2;
354 else 355 else
355 regs->bpc -= 4; 356 regs->bpc -= 4;
356 } 357 regs->syscall_nr = -1;
357 if (regs->r0 == -ERESTART_RESTARTBLOCK){ 358 } else if (regs->r0 == -ERESTART_RESTARTBLOCK){
358 regs->r0 = regs->orig_r0; 359 regs->r0 = regs->orig_r0;
359 regs->r7 = __NR_restart_syscall; 360 regs->r7 = __NR_restart_syscall;
360 inst = *(unsigned short *)(regs->bpc - 2); 361 inst = *(unsigned short *)(regs->bpc - 2);
@@ -362,6 +363,7 @@ static int do_signal(struct pt_regs *regs)
362 regs->bpc -= 2; 363 regs->bpc -= 2;
363 else 364 else
364 regs->bpc -= 4; 365 regs->bpc -= 4;
366 regs->syscall_nr = -1;
365 } 367 }
366 } 368 }
367 if (test_thread_flag(TIF_RESTORE_SIGMASK)) { 369 if (test_thread_flag(TIF_RESTORE_SIGMASK)) {