diff options
Diffstat (limited to 'arch/sparc/kernel/signal_32.c')
-rw-r--r-- | arch/sparc/kernel/signal_32.c | 16 |
1 files changed, 3 insertions, 13 deletions
diff --git a/arch/sparc/kernel/signal_32.c b/arch/sparc/kernel/signal_32.c index 5d74410c787b..ee81b90c532f 100644 --- a/arch/sparc/kernel/signal_32.c +++ b/arch/sparc/kernel/signal_32.c | |||
@@ -449,7 +449,7 @@ sigsegv: | |||
449 | return -EFAULT; | 449 | return -EFAULT; |
450 | } | 450 | } |
451 | 451 | ||
452 | static inline int | 452 | static inline void |
453 | handle_signal(unsigned long signr, struct k_sigaction *ka, | 453 | handle_signal(unsigned long signr, struct k_sigaction *ka, |
454 | siginfo_t *info, struct pt_regs *regs) | 454 | siginfo_t *info, struct pt_regs *regs) |
455 | { | 455 | { |
@@ -462,12 +462,10 @@ handle_signal(unsigned long signr, struct k_sigaction *ka, | |||
462 | err = setup_frame(ka, regs, signr, oldset); | 462 | err = setup_frame(ka, regs, signr, oldset); |
463 | 463 | ||
464 | if (err) | 464 | if (err) |
465 | return err; | 465 | return; |
466 | 466 | ||
467 | block_sigmask(ka, signr); | 467 | block_sigmask(ka, signr); |
468 | tracehook_signal_handler(signr, info, ka, regs, 0); | 468 | tracehook_signal_handler(signr, info, ka, regs, 0); |
469 | |||
470 | return 0; | ||
471 | } | 469 | } |
472 | 470 | ||
473 | static inline void syscall_restart(unsigned long orig_i0, struct pt_regs *regs, | 471 | static inline void syscall_restart(unsigned long orig_i0, struct pt_regs *regs, |
@@ -539,15 +537,7 @@ static void do_signal(struct pt_regs *regs, unsigned long orig_i0) | |||
539 | if (signr > 0) { | 537 | if (signr > 0) { |
540 | if (restart_syscall) | 538 | if (restart_syscall) |
541 | syscall_restart(orig_i0, regs, &ka.sa); | 539 | syscall_restart(orig_i0, regs, &ka.sa); |
542 | if (handle_signal(signr, &ka, &info, regs) == 0) { | 540 | handle_signal(signr, &ka, &info, regs); |
543 | /* a signal was successfully delivered; the saved | ||
544 | * sigmask will have been stored in the signal frame, | ||
545 | * and will be restored by sigreturn, so we can simply | ||
546 | * clear the TIF_RESTORE_SIGMASK flag. | ||
547 | */ | ||
548 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) | ||
549 | clear_thread_flag(TIF_RESTORE_SIGMASK); | ||
550 | } | ||
551 | return; | 541 | return; |
552 | } | 542 | } |
553 | if (restart_syscall && | 543 | if (restart_syscall && |