Re: [PATCH v1 6/6] scftorture: Make invoker threads actually wait for all threads to start

From: Joel Fernandes

Date: Sat Jul 18 2026 - 13:21:39 EST


Some reason my scripting missed rcu list for these last 2 patches. But they
are on the lkml list :) sorry.

Adding back rcu@.

On 7/18/2026 1:15 PM, Joel Fernandes wrote:
> Each scftorture_invoker() thread decrements n_started, which is
> initialized to the number of threads, and is then supposed to wait
> until all of its siblings have also checked in before starting the
> test proper. However, the wait loop is guarded by
> !atomic_dec_return(&n_started), which is true only for the final
> thread to arrive, and by then n_started is already zero, so the
> final thread does not wait either. The side-effect (possibly positive)
> is that no thread ever waits and the start-synchronization barrier is
> dead code, with early threads beginning to hammer smp_call_function*()
> while later threads are still being spawned.
>
> Invert the test so that every thread other than the last spins until
> n_started reaches zero, making the threads start testing together as
> intended. The existing torture_must_stop() check in the wait loop
> continues to bound the wait during shutdown.
>
> We can also drop the spinning entirely if the intent is to leave it as
> dead code, however for the current intent, this patches fixes the code.
>
> Signed-off-by: Joel Fernandes <joelagnelf@xxxxxxxxxx>
> ---
> kernel/scftorture.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/kernel/scftorture.c b/kernel/scftorture.c
> index ffd6c83732ee..392df1b4d4ed 100644
> --- a/kernel/scftorture.c
> +++ b/kernel/scftorture.c
> @@ -497,7 +497,7 @@ static int scftorture_invoker(void *arg)
> "%s: Wanted CPU %d, running on %d, nr_cpu_ids = %d\n",
> __func__, scfp->cpu, curcpu, nr_cpu_ids);
>
> - if (!atomic_dec_return(&n_started))
> + if (atomic_dec_return(&n_started))
> while (atomic_read_acquire(&n_started)) {
> if (torture_must_stop()) {
> VERBOSE_SCFTORTOUT("scftorture_invoker %d ended before starting", scfp->cpu);