diff options
Diffstat (limited to 'arch/frv/kernel/signal.c')
-rw-r--r-- | arch/frv/kernel/signal.c | 24 |
1 files changed, 7 insertions, 17 deletions
diff --git a/arch/frv/kernel/signal.c b/arch/frv/kernel/signal.c index 22efe8d2503..8dd0492bfb7 100644 --- a/arch/frv/kernel/signal.c +++ b/arch/frv/kernel/signal.c | |||
@@ -426,7 +426,7 @@ give_sigsegv: | |||
426 | /* | 426 | /* |
427 | * OK, we're invoking a handler | 427 | * OK, we're invoking a handler |
428 | */ | 428 | */ |
429 | static int handle_signal(unsigned long sig, siginfo_t *info, | 429 | static void handle_signal(unsigned long sig, siginfo_t *info, |
430 | struct k_sigaction *ka) | 430 | struct k_sigaction *ka) |
431 | { | 431 | { |
432 | sigset_t *oldset = sigmask_to_save(); | 432 | sigset_t *oldset = sigmask_to_save(); |
@@ -461,11 +461,12 @@ static int handle_signal(unsigned long sig, siginfo_t *info, | |||
461 | else | 461 | else |
462 | ret = setup_frame(sig, ka, oldset); | 462 | ret = setup_frame(sig, ka, oldset); |
463 | 463 | ||
464 | if (ret == 0) | 464 | if (ret) |
465 | block_sigmask(ka, sig); | 465 | return; |
466 | |||
467 | return ret; | ||
468 | 466 | ||
467 | block_sigmask(ka, sig); | ||
468 | tracehook_signal_handler(sig, info, ka, __frame, | ||
469 | test_thread_flag(TIF_SINGLESTEP)); | ||
469 | } /* end handle_signal() */ | 470 | } /* end handle_signal() */ |
470 | 471 | ||
471 | /*****************************************************************************/ | 472 | /*****************************************************************************/ |
@@ -495,18 +496,7 @@ static void do_signal(void) | |||
495 | 496 | ||
496 | signr = get_signal_to_deliver(&info, &ka, __frame, NULL); | 497 | signr = get_signal_to_deliver(&info, &ka, __frame, NULL); |
497 | if (signr > 0) { | 498 | if (signr > 0) { |
498 | if (handle_signal(signr, &info, &ka) == 0) { | 499 | handle_signal(signr, &info, &ka); |
499 | /* a signal was successfully delivered; the saved | ||
500 | * sigmask will have been stored in the signal frame, | ||
501 | * and will be restored by sigreturn, so we can simply | ||
502 | * clear the TIF_RESTORE_SIGMASK flag */ | ||
503 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) | ||
504 | clear_thread_flag(TIF_RESTORE_SIGMASK); | ||
505 | |||
506 | tracehook_signal_handler(signr, &info, &ka, __frame, | ||
507 | test_thread_flag(TIF_SINGLESTEP)); | ||
508 | } | ||
509 | |||
510 | return; | 500 | return; |
511 | } | 501 | } |
512 | 502 | ||