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/tile | |
parent | 5754f412a3f107cbcd93ee125bef296f2a07539b (diff) |
pull clearing RESTORE_SIGMASK into block_sigmask()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/tile')
-rw-r--r-- | arch/tile/kernel/signal.c | 25 |
1 files changed, 5 insertions, 20 deletions
diff --git a/arch/tile/kernel/signal.c b/arch/tile/kernel/signal.c index 588c28b2db58..9b71bfd4913d 100644 --- a/arch/tile/kernel/signal.c +++ b/arch/tile/kernel/signal.c | |||
@@ -242,7 +242,7 @@ give_sigsegv: | |||
242 | * OK, we're invoking a handler | 242 | * OK, we're invoking a handler |
243 | */ | 243 | */ |
244 | 244 | ||
245 | static int handle_signal(unsigned long sig, siginfo_t *info, | 245 | static void handle_signal(unsigned long sig, siginfo_t *info, |
246 | struct k_sigaction *ka, | 246 | struct k_sigaction *ka, |
247 | struct pt_regs *regs) | 247 | struct pt_regs *regs) |
248 | { | 248 | { |
@@ -279,15 +279,9 @@ static int handle_signal(unsigned long sig, siginfo_t *info, | |||
279 | else | 279 | else |
280 | #endif | 280 | #endif |
281 | ret = setup_rt_frame(sig, ka, info, oldset, regs); | 281 | ret = setup_rt_frame(sig, ka, info, oldset, regs); |
282 | if (ret == 0) { | 282 | if (ret) |
283 | /* This code is only called from system calls or from | 283 | return; |
284 | * the work_pending path in the return-to-user code, and | 284 | block_sigmask(ka, sig); |
285 | * either way we can re-enable interrupts unconditionally. | ||
286 | */ | ||
287 | block_sigmask(ka, sig); | ||
288 | } | ||
289 | |||
290 | return ret; | ||
291 | } | 285 | } |
292 | 286 | ||
293 | /* | 287 | /* |
@@ -311,16 +305,7 @@ void do_signal(struct pt_regs *regs) | |||
311 | signr = get_signal_to_deliver(&info, &ka, regs, NULL); | 305 | signr = get_signal_to_deliver(&info, &ka, regs, NULL); |
312 | if (signr > 0) { | 306 | if (signr > 0) { |
313 | /* Whee! Actually deliver the signal. */ | 307 | /* Whee! Actually deliver the signal. */ |
314 | if (handle_signal(signr, &info, &ka, regs) == 0) { | 308 | handle_signal(signr, &info, &ka, regs); |
315 | /* | ||
316 | * A signal was successfully delivered; the saved | ||
317 | * sigmask will have been stored in the signal frame, | ||
318 | * and will be restored by sigreturn, so we can simply | ||
319 | * clear the TS_RESTORE_SIGMASK flag. | ||
320 | */ | ||
321 | current_thread_info()->status &= ~TS_RESTORE_SIGMASK; | ||
322 | } | ||
323 | |||
324 | goto done; | 309 | goto done; |
325 | } | 310 | } |
326 | 311 | ||