mempool: add function to iterate the memory chunks
authorOlivier Matz <olivier.matz@6wind.com>
Wed, 18 May 2016 11:04:37 +0000 (13:04 +0200)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Thu, 19 May 2016 12:40:13 +0000 (14:40 +0200)
In the same model than rte_mempool_obj_iter(), introduce
rte_mempool_mem_iter() to iterate the memory chunks attached
to the mempool.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
lib/librte_mempool/rte_mempool.c
lib/librte_mempool/rte_mempool.h
lib/librte_mempool/rte_mempool_version.map

index 9260318..cbf5f2b 100644 (file)
@@ -246,6 +246,22 @@ rte_mempool_obj_iter(struct rte_mempool *mp,
        return n;
 }
 
+/* call mem_cb() for each mempool memory chunk */
+uint32_t
+rte_mempool_mem_iter(struct rte_mempool *mp,
+       rte_mempool_mem_cb_t *mem_cb, void *mem_cb_arg)
+{
+       struct rte_mempool_memhdr *hdr;
+       unsigned n = 0;
+
+       STAILQ_FOREACH(hdr, &mp->mem_list, next) {
+               mem_cb(mp, mem_cb_arg, hdr, n);
+               n++;
+       }
+
+       return n;
+}
+
 /* get the header, trailer and total size of a mempool element. */
 uint32_t
 rte_mempool_calc_obj_size(uint32_t elt_size, uint32_t flags,
index 690928e..65455d1 100644 (file)
@@ -335,6 +335,15 @@ typedef void (rte_mempool_obj_cb_t)(struct rte_mempool *mp,
                void *opaque, void *obj, unsigned obj_idx);
 typedef rte_mempool_obj_cb_t rte_mempool_obj_ctor_t; /* compat */
 
+/**
+ * A memory callback function for mempool.
+ *
+ * Used by rte_mempool_mem_iter().
+ */
+typedef void (rte_mempool_mem_cb_t)(struct rte_mempool *mp,
+               void *opaque, struct rte_mempool_memhdr *memhdr,
+               unsigned mem_idx);
+
 /**
  * A mempool constructor callback function.
  *
@@ -605,6 +614,24 @@ rte_dom0_mempool_create(const char *name, unsigned n, unsigned elt_size,
 uint32_t rte_mempool_obj_iter(struct rte_mempool *mp,
        rte_mempool_obj_cb_t *obj_cb, void *obj_cb_arg);
 
+/**
+ * Call a function for each mempool memory chunk
+ *
+ * Iterate across all memory chunks attached to a rte_mempool and call
+ * the callback function on it.
+ *
+ * @param mp
+ *   A pointer to an initialized mempool.
+ * @param mem_cb
+ *   A function pointer that is called for each memory chunk.
+ * @param mem_cb_arg
+ *   An opaque pointer passed to the callback function.
+ * @return
+ *   Number of memory chunks iterated.
+ */
+uint32_t rte_mempool_mem_iter(struct rte_mempool *mp,
+       rte_mempool_mem_cb_t *mem_cb, void *mem_cb_arg);
+
 /**
  * Dump the status of the mempool to the console.
  *
index 72bc967..7de9f8c 100644 (file)
@@ -22,6 +22,7 @@ DPDK_16.07 {
 
        rte_mempool_check_cookies;
        rte_mempool_obj_iter;
+       rte_mempool_mem_iter;
 
        local: *;
 } DPDK_2.0;