memzone: add iterator function
authorStephen Hemminger <stephen@networkplumber.org>
Fri, 2 May 2014 23:42:55 +0000 (16:42 -0700)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Fri, 16 May 2014 14:02:55 +0000 (16:02 +0200)
When doing diagnostic function, it is useful to have a ability
to iterate over all memzones.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
lib/librte_eal/common/eal_common_memzone.c
lib/librte_eal/common/include/rte_memzone.h

index 2a69c49..3918688 100644 (file)
@@ -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; i<RTE_MAX_MEMZONE; i++) {
+               if (mcfg->memzone[i].addr != NULL)
+                       (*func)(&mcfg->memzone[i], arg);
+       }
+       rte_rwlock_read_unlock(&mcfg->mlock);
+}
index 100233b..3a000e2 100644 (file)
@@ -252,6 +252,17 @@ const struct rte_memzone *rte_memzone_lookup(const char *name);
  */
 void rte_memzone_dump(FILE *);
 
+/**
+ * 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