diff options
Diffstat (limited to 'include/linux/signal.h')
-rw-r--r-- | include/linux/signal.h | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/include/linux/signal.h b/include/linux/signal.h index b5d99482d3fe..1a5f88316b08 100644 --- a/include/linux/signal.h +++ b/include/linux/signal.h | |||
@@ -282,6 +282,9 @@ extern void signal_setup_done(int failed, struct ksignal *ksig, int stepping); | |||
282 | extern void exit_signals(struct task_struct *tsk); | 282 | extern void exit_signals(struct task_struct *tsk); |
283 | extern void kernel_sigaction(int, __sighandler_t); | 283 | extern void kernel_sigaction(int, __sighandler_t); |
284 | 284 | ||
285 | #define SIG_KTHREAD ((__force __sighandler_t)2) | ||
286 | #define SIG_KTHREAD_KERNEL ((__force __sighandler_t)3) | ||
287 | |||
285 | static inline void allow_signal(int sig) | 288 | static inline void allow_signal(int sig) |
286 | { | 289 | { |
287 | /* | 290 | /* |
@@ -289,7 +292,17 @@ static inline void allow_signal(int sig) | |||
289 | * know it'll be handled, so that they don't get converted to | 292 | * know it'll be handled, so that they don't get converted to |
290 | * SIGKILL or just silently dropped. | 293 | * SIGKILL or just silently dropped. |
291 | */ | 294 | */ |
292 | kernel_sigaction(sig, (__force __sighandler_t)2); | 295 | kernel_sigaction(sig, SIG_KTHREAD); |
296 | } | ||
297 | |||
298 | static inline void allow_kernel_signal(int sig) | ||
299 | { | ||
300 | /* | ||
301 | * Kernel threads handle their own signals. Let the signal code | ||
302 | * know signals sent by the kernel will be handled, so that they | ||
303 | * don't get silently dropped. | ||
304 | */ | ||
305 | kernel_sigaction(sig, SIG_KTHREAD_KERNEL); | ||
293 | } | 306 | } |
294 | 307 | ||
295 | static inline void disallow_signal(int sig) | 308 | static inline void disallow_signal(int sig) |