Currently, memzone autotest expects there to be no memzones present by the time the test is run. Some hardware drivers will allocate memzones for internal use during initialization, resulting in tests failing due to unexpected memzones being allocated before the test was run.
Fix this by making callback increment a counter instead. This also doubles as a test for correct operation of memzone_walk(). Fixes: 71330483a193 ("test/memzone: fix memory leak") Cc: radoslaw.bierna...@linaro.org Cc: sta...@dpdk.org Signed-off-by: Anatoly Burakov <anatoly.bura...@intel.com> --- test/test/test_memzone.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/test/test/test_memzone.c b/test/test/test_memzone.c index 00d340f..5428b35 100644 --- a/test/test/test_memzone.c +++ b/test/test/test_memzone.c @@ -953,16 +953,19 @@ test_memzone_basic(void) return 0; } -static int memzone_walk_called; +static int memzone_walk_cnt; static void memzone_walk_clb(const struct rte_memzone *mz __rte_unused, void *arg __rte_unused) { - memzone_walk_called = 1; + memzone_walk_cnt++; } static int test_memzone(void) { + /* take note of how many memzones were allocated before running */ + int memzone_cnt = rte_eal_get_configuration()->mem_config->memzone_cnt; + printf("test basic memzone API\n"); if (test_memzone_basic() < 0) return -1; @@ -1000,8 +1003,9 @@ test_memzone(void) return -1; printf("check memzone cleanup\n"); + memzone_walk_cnt = 0; rte_memzone_walk(memzone_walk_clb, NULL); - if (memzone_walk_called) { + if (memzone_walk_cnt != memzone_cnt) { printf("there are some memzones left after test\n"); rte_memzone_dump(stdout); return -1; -- 2.7.4