Hi, On 08/16/2015 09:08 PM, Dan Aloni wrote: > The rest of the code expects pg_num <= RTE_DIM(mp->elt_pa). > > Signed-off-by: Dan Aloni <dan at kernelim.com> > --- > lib/librte_mempool/rte_mempool.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/lib/librte_mempool/rte_mempool.c > b/lib/librte_mempool/rte_mempool.c > index 8e185c545479..edcfa8bf9cb1 100644 > --- a/lib/librte_mempool/rte_mempool.c > +++ b/lib/librte_mempool/rte_mempool.c > @@ -461,7 +461,7 @@ rte_mempool_xmem_create(const char *name, unsigned n, > unsigned elt_size, > } > > /* Check that pg_num and pg_shift parameters are valid. */ > - if (pg_num < RTE_DIM(mp->elt_pa) || pg_shift > MEMPOOL_PG_SHIFT_MAX) { > + if (pg_num > RTE_DIM(mp->elt_pa) || pg_shift > MEMPOOL_PG_SHIFT_MAX) { > rte_errno = EINVAL; > return NULL; > } >
Could you give some details about the conditions to reproduce and the consequences of the issue? >From what I see, RTE_DIM(mp->elt_pa) is always 1: #define MEMPOOL_PG_NUM_DEFAULT 1 struct rte_mempool { ... phys_addr_t elt_pa[MEMPOOL_PG_NUM_DEFAULT]; } __rte_cache_aligned; >From rte_mempool_xmem_create() documentation, pg_num gives the size of the paddr array, which is allocated by the caller. So I think there is no issue here. Regards, Olivier