diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-05-21 23:42:15 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-06-01 12:58:49 -0400 |
commit | a610d6e672d6d3723e8da257ad4a8a288a8f2f89 (patch) | |
tree | 2fac6ce7f72756771f4f87583205cc402589dcad /arch/unicore32 | |
parent | 5754f412a3f107cbcd93ee125bef296f2a07539b (diff) |
pull clearing RESTORE_SIGMASK into block_sigmask()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/unicore32')
-rw-r--r-- | arch/unicore32/kernel/signal.c | 18 |
1 files changed, 3 insertions, 15 deletions
diff --git a/arch/unicore32/kernel/signal.c b/arch/unicore32/kernel/signal.c index bf23194dc74..dc41b11f8a5 100644 --- a/arch/unicore32/kernel/signal.c +++ b/arch/unicore32/kernel/signal.c | |||
@@ -312,7 +312,7 @@ static inline void setup_syscall_restart(struct pt_regs *regs) | |||
312 | /* | 312 | /* |
313 | * OK, we're invoking a handler | 313 | * OK, we're invoking a handler |
314 | */ | 314 | */ |
315 | static int handle_signal(unsigned long sig, struct k_sigaction *ka, | 315 | static void handle_signal(unsigned long sig, struct k_sigaction *ka, |
316 | siginfo_t *info, struct pt_regs *regs, int syscall) | 316 | siginfo_t *info, struct pt_regs *regs, int syscall) |
317 | { | 317 | { |
318 | struct thread_info *thread = current_thread_info(); | 318 | struct thread_info *thread = current_thread_info(); |
@@ -363,15 +363,13 @@ static int handle_signal(unsigned long sig, struct k_sigaction *ka, | |||
363 | 363 | ||
364 | if (ret != 0) { | 364 | if (ret != 0) { |
365 | force_sigsegv(sig, tsk); | 365 | force_sigsegv(sig, tsk); |
366 | return ret; | 366 | return; |
367 | } | 367 | } |
368 | 368 | ||
369 | /* | 369 | /* |
370 | * Block the signal if we were successful. | 370 | * Block the signal if we were successful. |
371 | */ | 371 | */ |
372 | block_sigmask(ka, sig); | 372 | block_sigmask(ka, sig); |
373 | |||
374 | return 0; | ||
375 | } | 373 | } |
376 | 374 | ||
377 | /* | 375 | /* |
@@ -403,17 +401,7 @@ static void do_signal(struct pt_regs *regs, int syscall) | |||
403 | 401 | ||
404 | signr = get_signal_to_deliver(&info, &ka, regs, NULL); | 402 | signr = get_signal_to_deliver(&info, &ka, regs, NULL); |
405 | if (signr > 0) { | 403 | if (signr > 0) { |
406 | if (handle_signal(signr, &ka, &info, regs, syscall) | 404 | handle_signal(signr, &ka, &info, regs, syscall); |
407 | == 0) { | ||
408 | /* | ||
409 | * A signal was successfully delivered; the saved | ||
410 | * sigmask will have been stored in the signal frame, | ||
411 | * and will be restored by sigreturn, so we can simply | ||
412 | * clear the TIF_RESTORE_SIGMASK flag. | ||
413 | */ | ||
414 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) | ||
415 | clear_thread_flag(TIF_RESTORE_SIGMASK); | ||
416 | } | ||
417 | return; | 405 | return; |
418 | } | 406 | } |
419 | 407 | ||