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/hexagon | |
parent | 5754f412a3f107cbcd93ee125bef296f2a07539b (diff) |
pull clearing RESTORE_SIGMASK into block_sigmask()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/hexagon')
-rw-r--r-- | arch/hexagon/kernel/signal.c | 26 |
1 files changed, 6 insertions, 20 deletions
diff --git a/arch/hexagon/kernel/signal.c b/arch/hexagon/kernel/signal.c index f73fcee09bac..5f7d7c8a1328 100644 --- a/arch/hexagon/kernel/signal.c +++ b/arch/hexagon/kernel/signal.c | |||
@@ -149,11 +149,9 @@ sigsegv: | |||
149 | /* | 149 | /* |
150 | * Setup invocation of signal handler | 150 | * Setup invocation of signal handler |
151 | */ | 151 | */ |
152 | static int handle_signal(int sig, siginfo_t *info, struct k_sigaction *ka, | 152 | static void handle_signal(int sig, siginfo_t *info, struct k_sigaction *ka, |
153 | struct pt_regs *regs) | 153 | struct pt_regs *regs) |
154 | { | 154 | { |
155 | int rc; | ||
156 | |||
157 | /* | 155 | /* |
158 | * If we're handling a signal that aborted a system call, | 156 | * If we're handling a signal that aborted a system call, |
159 | * set up the error return value before adding the signal | 157 | * set up the error return value before adding the signal |
@@ -186,15 +184,13 @@ static int handle_signal(int sig, siginfo_t *info, struct k_sigaction *ka, | |||
186 | * Set up the stack frame; not doing the SA_SIGINFO thing. We | 184 | * Set up the stack frame; not doing the SA_SIGINFO thing. We |
187 | * only set up the rt_frame flavor. | 185 | * only set up the rt_frame flavor. |
188 | */ | 186 | */ |
189 | rc = setup_rt_frame(sig, ka, info, sigmask_to_save(), regs); | ||
190 | |||
191 | /* If there was an error on setup, no signal was delivered. */ | 187 | /* If there was an error on setup, no signal was delivered. */ |
192 | if (rc) | 188 | if (setup_rt_frame(sig, ka, info, sigmask_to_save(), regs) < 0) |
193 | return rc; | 189 | return; |
194 | 190 | ||
195 | block_sigmask(ka, sig); | 191 | block_sigmask(ka, sig); |
196 | 192 | tracehook_signal_handler(sig, info, ka, regs, | |
197 | return 0; | 193 | test_thread_flag(TIF_SINGLESTEP)); |
198 | } | 194 | } |
199 | 195 | ||
200 | /* | 196 | /* |
@@ -215,17 +211,7 @@ static void do_signal(struct pt_regs *regs) | |||
215 | signo = get_signal_to_deliver(&info, &sigact, regs, NULL); | 211 | signo = get_signal_to_deliver(&info, &sigact, regs, NULL); |
216 | 212 | ||
217 | if (signo > 0) { | 213 | if (signo > 0) { |
218 | if (handle_signal(signo, &info, &sigact, regs) == 0) { | 214 | handle_signal(signo, &info, &sigact, regs); |
219 | /* | ||
220 | * Successful delivery case. The saved sigmask is | ||
221 | * stored in the signal frame, and will be restored | ||
222 | * by sigreturn. We can clear the TIF flag. | ||
223 | */ | ||
224 | clear_thread_flag(TIF_RESTORE_SIGMASK); | ||
225 | |||
226 | tracehook_signal_handler(signo, &info, &sigact, regs, | ||
227 | test_thread_flag(TIF_SINGLESTEP)); | ||
228 | } | ||
229 | return; | 215 | return; |
230 | } | 216 | } |
231 | 217 | ||