From 6cda39af86ffc629732aac79058207cb4044e952 Mon Sep 17 00:00:00 2001 From: Stanislaw Kardach Date: Wed, 28 Apr 2021 16:25:53 +0200 Subject: [PATCH] test/distributor: fix burst flush on worker quit While working on RISC-V port I have encountered a situation where worker threads get stuck in the rte_distributor_return_pkt() function in the burst test. Investigation showed some of the threads enter this function with flag RTE_DISTRIB_GET_BUF set in the d->retptr64[0]. At the same time the main thread has already passed rte_distributor_process() so nobody will clear this flag and hence workers can't return. What I've noticed is that adding a flush just after the last _process(), similarly to how quit_workers() function is written in the test_distributor.c fixes the issue. Lukasz Wojciechowski reproduced the same issue on x86 using a VM with 32 emulated CPU cores to force some lcores not to be woken up. Fixes: 7c3287a10535 ("test/distributor: add performance test for burst mode") Cc: stable@dpdk.org Signed-off-by: Stanislaw Kardach Acked-by: David Hunt Tested-by: Lukasz Wojciechowski Reviewed-by: Lukasz Wojciechowski --- app/test/test_distributor_perf.c | 1 + 1 file changed, 1 insertion(+) diff --git a/app/test/test_distributor_perf.c b/app/test/test_distributor_perf.c index 371a14ba4c..fdbeae6d2f 100644 --- a/app/test/test_distributor_perf.c +++ b/app/test/test_distributor_perf.c @@ -196,6 +196,7 @@ quit_workers(struct rte_distributor *d, struct rte_mempool *p) rte_mempool_put_bulk(p, (void *)bufs, num_workers); rte_distributor_process(d, NULL, 0); + rte_distributor_flush(d); rte_eal_mp_wait_lcore(); quit = 0; worker_idx = 0; -- 2.20.1