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/c6x/kernel | |
parent | 5754f412a3f107cbcd93ee125bef296f2a07539b (diff) |
pull clearing RESTORE_SIGMASK into block_sigmask()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/c6x/kernel')
-rw-r--r-- | arch/c6x/kernel/signal.c | 23 |
1 files changed, 6 insertions, 17 deletions
diff --git a/arch/c6x/kernel/signal.c b/arch/c6x/kernel/signal.c index 38bb501eb117..f39346f1f2d6 100644 --- a/arch/c6x/kernel/signal.c +++ b/arch/c6x/kernel/signal.c | |||
@@ -248,7 +248,7 @@ do_restart: | |||
248 | /* | 248 | /* |
249 | * handle the actual delivery of a signal to userspace | 249 | * handle the actual delivery of a signal to userspace |
250 | */ | 250 | */ |
251 | static int handle_signal(int sig, | 251 | static void handle_signal(int sig, |
252 | siginfo_t *info, struct k_sigaction *ka, | 252 | siginfo_t *info, struct k_sigaction *ka, |
253 | struct pt_regs *regs, int syscall) | 253 | struct pt_regs *regs, int syscall) |
254 | { | 254 | { |
@@ -277,11 +277,10 @@ static int handle_signal(int sig, | |||
277 | } | 277 | } |
278 | 278 | ||
279 | /* Set up the stack frame */ | 279 | /* Set up the stack frame */ |
280 | ret = setup_rt_frame(sig, ka, info, sigmask_to_save(), regs); | 280 | if (setup_rt_frame(sig, ka, info, sigmask_to_save(), regs) < 0) |
281 | if (ret == 0) | 281 | return; |
282 | block_sigmask(ka, sig); | 282 | block_sigmask(ka, sig); |
283 | 283 | tracehook_signal_handler(sig, info, ka, regs, 0); | |
284 | return ret; | ||
285 | } | 284 | } |
286 | 285 | ||
287 | /* | 286 | /* |
@@ -300,17 +299,7 @@ static void do_signal(struct pt_regs *regs, int syscall) | |||
300 | 299 | ||
301 | signr = get_signal_to_deliver(&info, &ka, regs, NULL); | 300 | signr = get_signal_to_deliver(&info, &ka, regs, NULL); |
302 | if (signr > 0) { | 301 | if (signr > 0) { |
303 | if (handle_signal(signr, &info, &ka, regs, syscall) == 0) { | 302 | handle_signal(signr, &info, &ka, regs, syscall); |
304 | /* a signal was successfully delivered; the saved | ||
305 | * sigmask will have been stored in the signal frame, | ||
306 | * and will be restored by sigreturn, so we can simply | ||
307 | * clear the TIF_RESTORE_SIGMASK flag */ | ||
308 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) | ||
309 | clear_thread_flag(TIF_RESTORE_SIGMASK); | ||
310 | |||
311 | tracehook_signal_handler(signr, &info, &ka, regs, 0); | ||
312 | } | ||
313 | |||
314 | return; | 303 | return; |
315 | } | 304 | } |
316 | 305 | ||