From: Oleg Nesterov Previously handle_stop_signal(SIGCONT) could drop ->siglock. That is why kill_pid_info(SIGCONT) takes tasklist_lock to make sure the target task can't go away after unlock. Not needed now. Signed-off-by: Oleg Nesterov Cc: Roland McGrath Cc: Jiri Kosina Signed-off-by: Andrew Morton --- include/linux/signal.h | 2 -- kernel/signal.c | 7 +------ 2 files changed, 1 insertion(+), 8 deletions(-) diff -puN include/linux/signal.h~kill_pid_info-dont-take-now-unneeded-tasklist_lock include/linux/signal.h --- a/include/linux/signal.h~kill_pid_info-dont-take-now-unneeded-tasklist_lock +++ a/include/linux/signal.h @@ -362,8 +362,6 @@ int unhandled_signal(struct task_struct #define sig_kernel_stop(sig) \ (((sig) < SIGRTMIN) && siginmask(sig, SIG_KERNEL_STOP_MASK)) -#define sig_needs_tasklist(sig) ((sig) == SIGCONT) - #define sig_user_defined(t, signr) \ (((t)->sighand->action[(signr)-1].sa.sa_handler != SIG_DFL) && \ ((t)->sighand->action[(signr)-1].sa.sa_handler != SIG_IGN)) diff -puN kernel/signal.c~kill_pid_info-dont-take-now-unneeded-tasklist_lock kernel/signal.c --- a/kernel/signal.c~kill_pid_info-dont-take-now-unneeded-tasklist_lock +++ a/kernel/signal.c @@ -1039,9 +1039,6 @@ int kill_pid_info(int sig, struct siginf struct task_struct *p; rcu_read_lock(); - if (unlikely(sig_needs_tasklist(sig))) - read_lock(&tasklist_lock); - retry: p = pid_task(pid, PIDTYPE_PID); if (p) { @@ -1055,10 +1052,8 @@ retry: */ goto retry; } - - if (unlikely(sig_needs_tasklist(sig))) - read_unlock(&tasklist_lock); rcu_read_unlock(); + return error; } _