signal: retarget_shared_pending: optimize while_each_thread() loop
authorOleg Nesterov <oleg@redhat.com>
Wed, 27 Apr 2011 17:50:21 +0000 (19:50 +0200)
committerOleg Nesterov <oleg@redhat.com>
Thu, 28 Apr 2011 11:01:35 +0000 (13:01 +0200)
commitfec9993db093acfc3999a364e31f8adae41fcb28
tree6398e6f0d811128cb46c04ec631f3dcc6075728a
parentf646e227b88a164a841d6b6dd969d8a45272dd83
signal: retarget_shared_pending: optimize while_each_thread() loop

retarget_shared_pending() blindly does recalc_sigpending_and_wake() for
every sub-thread, this is suboptimal. We can check t->blocked and stop
looping once every bit in shared_pending has the new target.

Note: we do not take task_is_stopped_or_traced(t) into account, we are
not trying to speed up the signal delivery or to avoid the unnecessary
(but harmless) signal_wake_up(0) in this unlikely case.

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Reviewed-by: Matt Fleming <matt.fleming@linux.intel.com>
Acked-by: Tejun Heo <tj@kernel.org>
kernel/signal.c