From: Oleg Nesterov Suggested by Roland McGrath. Initialize signal->curr_target in copy_signal(). This way ->curr_target is never == NULL, we can kill the check in __group_complete_signal's hot path. Signed-off-by: Oleg Nesterov Cc: Roland McGrath Signed-off-by: Andrew Morton --- kernel/fork.c | 2 +- kernel/signal.c | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff -puN kernel/fork.c~signals-microoptimize-the-usage-of-curr_target kernel/fork.c --- a/kernel/fork.c~signals-microoptimize-the-usage-of-curr_target +++ a/kernel/fork.c @@ -902,7 +902,7 @@ static int copy_signal(unsigned long clo sig->group_exit_code = 0; sig->group_exit_task = NULL; sig->group_stop_count = 0; - sig->curr_target = NULL; + sig->curr_target = tsk; init_sigpending(&sig->shared_pending); INIT_LIST_HEAD(&sig->posix_timers); diff -puN kernel/signal.c~signals-microoptimize-the-usage-of-curr_target kernel/signal.c --- a/kernel/signal.c~signals-microoptimize-the-usage-of-curr_target +++ a/kernel/signal.c @@ -863,10 +863,6 @@ __group_complete_signal(int sig, struct * Otherwise try to find a suitable thread. */ t = signal->curr_target; - if (t == NULL) - /* restart balancing at this thread */ - t = signal->curr_target = p; - while (!wants_signal(sig, t)) { t = next_thread(t); if (t == signal->curr_target) _