Commit 8a56f266 authored by Mateusz Guzik's avatar Mateusz Guzik Committed by Andrew Morton
Browse files

signal: avoid clearing TIF_SIGPENDING in recalc_sigpending() if unset

Clearing is an atomic op and the flag is not set most of the time.

When creating and destroying threads in the same process with the pthread
family, the primary bottleneck is calls to sigprocmask which take the
process-wide sighand lock.

Avoiding the atomic gives me a 2% bump in start/teardown rate at 24-core
scale.

[akpm@linux-foundation.org: add unlikely() as well]
Link: https://lkml.kernel.org/r/20250303134908.423242-1-mjguzik@gmail.com


Signed-off-by: default avatarMateusz Guzik <mjguzik@gmail.com>
Acked-by: default avatarOleg Nesterov <oleg@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent e0349c46
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -176,9 +176,10 @@ static bool recalc_sigpending_tsk(struct task_struct *t)

void recalc_sigpending(void)
{
	if (!recalc_sigpending_tsk(current) && !freezing(current))
	if (!recalc_sigpending_tsk(current) && !freezing(current)) {
		if (unlikely(test_thread_flag(TIF_SIGPENDING)))
			clear_thread_flag(TIF_SIGPENDING);

	}
}
EXPORT_SYMBOL(recalc_sigpending);