[PATCH v2] test: defer timer initialization

David Marchand david.marchand at redhat.com
Mon Oct 19 10:16:02 CEST 2026


Initialize timers only in unit tests that do require them.

This removes an unconditional memzone allocation (3MB on ARM) and
avoids failures of the eal_flags_file_prefix_autotest unit test
that runs in legacy mem mode and has a tight 18MB memory budget.

Cc: stable at dpdk.org

Signed-off-by: David Marchand <david.marchand at redhat.com>
Acked-by: Morten Brørup <mb at smartsharesystems.com>
---
Changes since v1:
- fixed overwritten default return code in pdcp_autotest,
- factorized timer init in timer_secondary_autotest,

---
 app/test/test.c                 |  8 --------
 app/test/test_pdcp.c            | 10 +++++++++-
 app/test/test_timer.c           |  7 +++++++
 app/test/test_timer_perf.c      |  7 +++++++
 app/test/test_timer_racecond.c  |  6 ++++++
 app/test/test_timer_secondary.c | 18 ++++++++++++------
 6 files changed, 41 insertions(+), 15 deletions(-)

diff --git a/app/test/test.c b/app/test/test.c
index c610c3588e..8f23325cb6 100644
--- a/app/test/test.c
+++ b/app/test/test.c
@@ -162,14 +162,6 @@ main(int argc, char **argv)
 
 	prgname = argv[0];
 
-#ifdef RTE_LIB_TIMER
-	ret = rte_timer_subsystem_init();
-	if (ret < 0 && ret != -EALREADY) {
-		ret = -1;
-		goto out;
-	}
-#endif
-
 	if (commands_init() < 0) {
 		ret = -1;
 		goto out;
diff --git a/app/test/test_pdcp.c b/app/test/test_pdcp.c
index 784e2dddd9..af525cf73a 100644
--- a/app/test/test_pdcp.c
+++ b/app/test/test_pdcp.c
@@ -1751,7 +1751,7 @@ test_expiry_with_rte_timer(const struct pdcp_test_conf *ul_conf)
 	struct test_rte_timer_args timer_args;
 	struct rte_pdcp_entity *pdcp_entity;
 	struct pdcp_test_conf dl_conf;
-	int ret = TEST_FAILED, nb_out;
+	int ret, nb_out;
 	struct rte_timer timer = {0};
 
 	const int start_count = 0;
@@ -1759,6 +1759,14 @@ test_expiry_with_rte_timer(const struct pdcp_test_conf *ul_conf)
 	if (ul_conf->entity.pdcp_xfrm.pkt_dir == RTE_SECURITY_PDCP_DOWNLINK)
 		return TEST_SKIPPED;
 
+	ret = rte_timer_subsystem_init();
+	if (ret < 0 && ret != -EALREADY) {
+		printf("timer subsystem init failed: %d\n", ret);
+		return TEST_FAILED;
+	}
+
+	ret = TEST_FAILED;
+
 	/* Set up a timer */
 	rte_timer_init(&timer);
 
diff --git a/app/test/test_timer.c b/app/test/test_timer.c
index c936843ddc..c943d3155d 100644
--- a/app/test/test_timer.c
+++ b/app/test/test_timer.c
@@ -540,12 +540,19 @@ test_timer(void)
 	unsigned i;
 	uint64_t cur_time;
 	uint64_t hz;
+	int ret;
 
 	if (rte_lcore_count() < 2) {
 		printf("Not enough cores for timer_autotest, expecting at least 2\n");
 		return TEST_SKIPPED;
 	}
 
+	ret = rte_timer_subsystem_init();
+	if (ret < 0 && ret != -EALREADY) {
+		printf("timer subsystem init failed: %d\n", ret);
+		return TEST_FAILED;
+	}
+
 	/* sanity check our timer sources and timer config values */
 	if (timer_sanity_check() < 0) {
 		printf("Timer sanity checks failed\n");
diff --git a/app/test/test_timer_perf.c b/app/test/test_timer_perf.c
index d2d74ebbc6..feb2e910b5 100644
--- a/app/test/test_timer_perf.c
+++ b/app/test/test_timer_perf.c
@@ -41,6 +41,13 @@ test_timer_perf(void)
 	struct rte_timer *tms;
 	uint64_t start_tsc, end_tsc, delay_start;
 	unsigned lcore_id = rte_lcore_id();
+	int ret;
+
+	ret = rte_timer_subsystem_init();
+	if (ret < 0 && ret != -EALREADY) {
+		printf("timer subsystem init failed: %d\n", ret);
+		return TEST_FAILED;
+	}
 
 	tms = rte_malloc(NULL, sizeof(*tms) * MAX_ITERATIONS, 0);
 
diff --git a/app/test/test_timer_racecond.c b/app/test/test_timer_racecond.c
index 6f8b448ff8..4f0ae04062 100644
--- a/app/test/test_timer_racecond.c
+++ b/app/test/test_timer_racecond.c
@@ -121,6 +121,12 @@ test_timer_racecond(void)
 	unsigned lcore_id;
 	unsigned i;
 
+	ret = rte_timer_subsystem_init();
+	if (ret < 0 && ret != -EALREADY) {
+		printf("timer subsystem init failed: %d\n", ret);
+		return TEST_FAILED;
+	}
+
 	main_lcore = lcore_id = rte_lcore_id();
 	hz = rte_get_timer_hz();
 
diff --git a/app/test/test_timer_secondary.c b/app/test/test_timer_secondary.c
index 529774f4d0..774751c0f5 100644
--- a/app/test/test_timer_secondary.c
+++ b/app/test/test_timer_secondary.c
@@ -127,13 +127,19 @@ test_timer_secondary(void)
 	struct test_info *test_info;
 	int ret;
 
-	if (proc_type == RTE_PROC_PRIMARY) {
-		if (rte_lcore_count() < NUM_LCORES_NEEDED) {
-			printf("Not enough cores for test_timer_secondary, expecting at least %u\n",
-			       NUM_LCORES_NEEDED);
-			return TEST_SKIPPED;
-		}
+	if (proc_type == RTE_PROC_PRIMARY && rte_lcore_count() < NUM_LCORES_NEEDED) {
+		printf("Not enough cores for test_timer_secondary, expecting at least %u\n",
+		       NUM_LCORES_NEEDED);
+		return TEST_SKIPPED;
+	}
 
+	ret = rte_timer_subsystem_init();
+	if (ret < 0 && ret != -EALREADY) {
+		printf("timer subsystem init failed: %d\n", ret);
+		return TEST_FAILED;
+	}
+
+	if (proc_type == RTE_PROC_PRIMARY) {
 		mz = rte_memzone_reserve(TEST_INFO_MZ_NAME, sizeof(*test_info),
 					 SOCKET_ID_ANY, 0);
 		TEST_ASSERT_NOT_NULL(mz, "Couldn't allocate memory for "
-- 
2.54.0



More information about the stable mailing list