All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] dmaengine: dmatest: fix race between wait for thread and thread start
@ 2026-08-17 19:25 Cosmin Tanislav
  2026-08-17 19:40 ` sashiko-bot
  0 siblings, 1 reply; 3+ messages in thread
From: Cosmin Tanislav @ 2026-08-17 19:25 UTC (permalink / raw)
  To: Vinod Koul, Frank Li, Seraj Alijan
  Cc: dmaengine, linux-kernel, Cosmin Tanislav

Each dmatest worker thread has a pending and a done flag which describe
the thread's lifecycle.

pending is initialized to true when the thread is added to the threads
list. pending is set to false once the thread is actually running. done
is set to true once the thread has finished its testing.

When the wait module parameter is set to true, dmatest_init() waits for
the !is_threaded_test_run() condition to become true.

If the worker thread is not started and running by the time
dmatest_init() waits, the !is_threaded_test_run() condition will be true
and the wait will stop early, before the worker thread is even started.
dmatest_init() exits, defeating the whole purpose of the wait.

If then we try to remove the module, kthread_stop() will try to cleanup
the worker threads, interrupting wait_event_freezable_timeout(), which
will return -ERESTARTSYS, causing the "test timed out" message to be
printed.

Clear the pending flag once we wake up the worker thread to avoid this
race.

Fixes: d53513d5dc28 ("dmaengine: dmatest: Add support for multi channel testing")
Signed-off-by: Cosmin Tanislav <cosmin-gabriel.tanislav.xa@renesas.com>
---
 drivers/dma/dmatest.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c
index 2ae3469397f3..2d2eb43eee7c 100644
--- a/drivers/dma/dmatest.c
+++ b/drivers/dma/dmatest.c
@@ -610,7 +610,6 @@ static int dmatest_func(void *data)
 	ret = -ENOMEM;
 
 	smp_rmb();
-	thread->pending = false;
 	info = thread->info;
 	params = &info->params;
 	chan = thread->chan;
@@ -1142,6 +1141,7 @@ static void run_pending_tests(struct dmatest_info *info)
 		thread_count = 0;
 		list_for_each_entry(thread, &dtc->threads, node) {
 			wake_up_process(thread->task);
+			thread->pending = false;
 			thread_count++;
 		}
 		pr_info("Started %u threads using %s\n",
-- 
2.55.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-08-17 20:01 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-17 19:25 [PATCH] dmaengine: dmatest: fix race between wait for thread and thread start Cosmin Tanislav
2026-08-17 19:40 ` sashiko-bot
2026-08-17 20:01   ` Cosmin-Gabriel Tanislav

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.