From: "Paul E. McKenney" The following patch fixes a locking issue in -rt signals, where the job-control signals drop sighand_lock momentarily during signal handling. This interacts badly with the RCU-ification of unicast signal delivery. The fix is simply to acquire tasklist_lock for job-control signals, since these typically do not have stringent scalability or latency requirements. Signed-off-by: "Paul E. McKenney" Cc: Ingo Molnar Cc: Roland McGrath Cc: Oleg Nesterov Signed-off-by: Andrew Morton --- kernel/signal.c | 7 +++++++ 1 files changed, 7 insertions(+) diff -puN kernel/signal.c~fix-sigstop-locking-issue kernel/signal.c --- devel/kernel/signal.c~fix-sigstop-locking-issue 2005-11-22 22:30:39.000000000 -0800 +++ devel-akpm/kernel/signal.c 2005-11-22 22:30:39.000000000 -0800 @@ -1158,13 +1158,20 @@ int kill_proc_info(int sig, struct siginfo *info, pid_t pid) { int error; + int acquired_tasklist_lock = 0; struct task_struct *p; rcu_read_lock(); + if (unlikely(sig_kernel_stop(sig) || sig == SIGCONT)) { + read_lock(&tasklist_lock); + acquired_tasklist_lock = 1; + } p = find_task_by_pid(pid); error = -ESRCH; if (p) error = group_send_sig_info(sig, info, p); + if (unlikely(acquired_tasklist_lock)) + read_unlock(&tasklist_lock); rcu_read_unlock(); return error; } _