From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stephen Hemminger Subject: [PATCH 3/5] mempool: add walk iterator Date: Fri, 02 May 2014 16:42:54 -0700 Message-ID: <20140502234404.328560724@vyatta.com> References: <20140502234251.707598579@vyatta.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 To: dev-VfR2kkLFssw@public.gmane.org Return-path: Content-Disposition: inline; filename=mempool-walk.patch List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces-VfR2kkLFssw@public.gmane.org Sender: "dev" Add function to iterate over mempool. Useful for diagnostic code that wants to look at mempool usage patterns. Signed-off-by: Stephen Hemminger --- a/lib/librte_mempool/rte_mempool.c 2014-05-02 16:31:13.279574637 -0700 +++ b/lib/librte_mempool/rte_mempool.c 2014-05-02 16:31:13.279574637 -0700 @@ -857,3 +857,24 @@ rte_mempool_lookup(const char *name) return mp; } + +void rte_mempool_walk(void (*func)(const struct rte_mempool *, void *), + void *arg) +{ + struct rte_mempool *mp = NULL; + struct rte_mempool_list *mempool_list; + + if ((mempool_list = + RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_MEMPOOL, rte_mempool_list)) == NULL) { + rte_errno = E_RTE_NO_TAILQ; + return; + } + + rte_rwlock_read_lock(RTE_EAL_MEMPOOL_RWLOCK); + + TAILQ_FOREACH(mp, mempool_list, next) { + (*func)(mp, arg); + } + + rte_rwlock_read_unlock(RTE_EAL_MEMPOOL_RWLOCK); +} --- a/lib/librte_mempool/rte_mempool.h 2014-05-02 16:31:13.279574637 -0700 +++ b/lib/librte_mempool/rte_mempool.h 2014-05-02 16:31:13.279574637 -0700 @@ -1374,6 +1374,17 @@ size_t rte_mempool_xmem_size(uint32_t el ssize_t rte_mempool_xmem_usage(void *vaddr, uint32_t elt_num, size_t elt_sz, const phys_addr_t paddr[], uint32_t pg_num, uint32_t pg_shift); +/** + * Walk list of all memory pools + * + * @param func + * Iterator function + * @param arg + * Argument passed to iterator + */ +void rte_mempool_walk(void (*func)(const struct rte_mempool *, void *arg), + void *arg); + #ifdef __cplusplus } #endif