diff options
-rw-r--r-- | kernel/signal.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/kernel/signal.c b/kernel/signal.c index 819fa49aa70a..c5b65aa4c2bc 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
@@ -147,6 +147,9 @@ static kmem_cache_t *sigqueue_cachep; | |||
147 | #define sig_kernel_stop(sig) \ | 147 | #define sig_kernel_stop(sig) \ |
148 | (((sig) < SIGRTMIN) && T(sig, SIG_KERNEL_STOP_MASK)) | 148 | (((sig) < SIGRTMIN) && T(sig, SIG_KERNEL_STOP_MASK)) |
149 | 149 | ||
150 | #define sig_needs_tasklist(sig) \ | ||
151 | (((sig) < SIGRTMIN) && T(sig, SIG_KERNEL_STOP_MASK | M(SIGCONT))) | ||
152 | |||
150 | #define sig_user_defined(t, signr) \ | 153 | #define sig_user_defined(t, signr) \ |
151 | (((t)->sighand->action[(signr)-1].sa.sa_handler != SIG_DFL) && \ | 154 | (((t)->sighand->action[(signr)-1].sa.sa_handler != SIG_DFL) && \ |
152 | ((t)->sighand->action[(signr)-1].sa.sa_handler != SIG_IGN)) | 155 | ((t)->sighand->action[(signr)-1].sa.sa_handler != SIG_IGN)) |
@@ -1199,7 +1202,7 @@ kill_proc_info(int sig, struct siginfo *info, pid_t pid) | |||
1199 | struct task_struct *p; | 1202 | struct task_struct *p; |
1200 | 1203 | ||
1201 | rcu_read_lock(); | 1204 | rcu_read_lock(); |
1202 | if (unlikely(sig_kernel_stop(sig) || sig == SIGCONT)) { | 1205 | if (unlikely(sig_needs_tasklist(sig))) { |
1203 | read_lock(&tasklist_lock); | 1206 | read_lock(&tasklist_lock); |
1204 | acquired_tasklist_lock = 1; | 1207 | acquired_tasklist_lock = 1; |
1205 | } | 1208 | } |