When a configured worker lcore is same as EAL main lcore, the main
thread calls `rte_eal_remote_launch()` on itself and then waits for
`worker_info.ready_flag`. The worker function cannot run on the main
lcore while the main thread is blocked in that loop, and the test hangs.
Reject such cases early in the `run_test()`.
Fixes: 623dc9364dc6 ("app/dma-perf: introduce DMA performance test")
CC: [email protected]
Signed-off-by: Rupesh Chiluka <[email protected]>
---
app/test-dma-perf/main.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/app/test-dma-perf/main.c b/app/test-dma-perf/main.c
index 4249dcfd3d..a22434c558 100644
--- a/app/test-dma-perf/main.c
+++ b/app/test-dma-perf/main.c
@@ -109,7 +109,9 @@ run_test_case(struct test_configure *case_cfg)
static void
run_test(uint32_t case_id, struct test_configure *case_cfg)
{
+ uint32_t worker_lcore;
uint32_t nb_lcores = rte_lcore_count();
+ uint32_t main_lcore = rte_get_main_lcore();
struct test_configure_entry *mem_size = &case_cfg->mem_size;
struct test_configure_entry *buf_size = &case_cfg->buf_size;
struct test_configure_entry *ring_size = &case_cfg->ring_size;
@@ -122,6 +124,15 @@ run_test(uint32_t case_id, struct test_configure *case_cfg)
return;
}
+ for (uint32_t i = 0; i < case_cfg->num_worker; i++) {
+ worker_lcore = case_cfg->dma_config[i].lcore_dma_map.lcore;
+ if (worker_lcore == main_lcore) {
+ printf("Case %u: worker %u (lcore %u) cannot run on the
EAL main lcore (%u).\n",
+ case_id, i, worker_lcore, main_lcore);
+ return;
+ }
+ }
+
printf("Number of used lcores: %u.\n", nb_lcores);
if (mem_size->incr != 0)
--
2.48.1