finish_utrace_stop() can check for pending SIGKILL lockless, ant it can use __fatal_signal_pending() helper.
Signed-off-by: Oleg Nesterov <o...@redhat.com> --- kernel/utrace.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) --- __UTRACE/kernel/utrace.c~1_FINISH_FATAL_SIGNAL 2009-08-14 11:58:05.000000000 +0200 +++ __UTRACE/kernel/utrace.c 2009-08-14 12:43:44.000000000 +0200 @@ -354,17 +354,15 @@ static inline bool finish_utrace_stop(st * We're officially awake if it's clear. */ if (unlikely(utrace->stopped)) { - spin_lock(&utrace->lock); /* * If we're here with it still set, it must have been * signal_wake_up() instead, waking us up for a SIGKILL. */ - spin_lock_irq(&task->sighand->siglock); - WARN_ON(!sigismember(&task->pending.signal, SIGKILL)); - spin_unlock_irq(&task->sighand->siglock); + WARN_ON(!__fatal_signal_pending(task)); + spin_lock(&utrace->lock); utrace->stopped = 0; - killed = true; spin_unlock(&utrace->lock); + killed = true; } return killed;