When doing diagnostic function, it is useful to have a ability to iterate over all memzones. Signed-off-by: Stephen Hemminger --- a/lib/librte_eal/common/eal_common_memzone.c 2014-05-02 16:31:15.375587103 -0700 +++ b/lib/librte_eal/common/eal_common_memzone.c 2014-05-02 16:31:15.375587103 -0700 @@ -505,3 +505,20 @@ rte_eal_memzone_init(void) return 0; } + +/* Walk all reserved memory zones */ +void rte_memzone_walk(void (*func)(const struct rte_memzone *, void *), + void *arg) +{ + struct rte_mem_config *mcfg; + unsigned i; + + mcfg = rte_eal_get_configuration()->mem_config; + + rte_rwlock_read_lock(&mcfg->mlock); + for (i=0; imemzone[i].addr != NULL) + (*func)(&mcfg->memzone[i], arg); + } + rte_rwlock_read_unlock(&mcfg->mlock); +} --- a/lib/librte_eal/common/include/rte_memzone.h 2014-05-02 16:31:15.375587103 -0700 +++ b/lib/librte_eal/common/include/rte_memzone.h 2014-05-02 16:31:15.375587103 -0700 @@ -248,6 +248,17 @@ const struct rte_memzone *rte_memzone_lo */ void rte_memzone_dump(void); +/** + * Walk list of all memzones + * + * @param func + * Iterator function + * @param arg + * Argument passed to iterator + */ +void rte_memzone_walk(void (*func)(const struct rte_memzone *, void *arg), + void *arg); + #ifdef __cplusplus } #endif