On Mon, 10 Jul 2017 11:42:34 +0000, Santosh Shukla <santosh.shu...@caviumnetworks.com> wrote: > Check iova mode and accordingly return phy addr. > > Signed-off-by: Santosh Shukla <santosh.shu...@caviumnetworks.com> > Signed-off-by: Jerin Jacob <jerin.ja...@caviumnetworks.com> > --- > lib/librte_mempool/rte_mempool.h | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/lib/librte_mempool/rte_mempool.h > b/lib/librte_mempool/rte_mempool.h > index 76b5b3b15..fafa77e3b 100644 > --- a/lib/librte_mempool/rte_mempool.h > +++ b/lib/librte_mempool/rte_mempool.h > @@ -78,6 +78,7 @@ > #include <rte_ring.h> > #include <rte_memcpy.h> > #include <rte_common.h> > +#include <rte_bus.h> > > #ifdef __cplusplus > extern "C" { > @@ -1397,9 +1398,14 @@ rte_mempool_empty(const struct rte_mempool *mp) > static inline phys_addr_t > rte_mempool_virt2phy(__rte_unused const struct rte_mempool *mp, const void > *elt) > { > - const struct rte_mempool_objhdr *hdr; > - hdr = (const struct rte_mempool_objhdr *)RTE_PTR_SUB(elt, > + struct rte_mempool_objhdr *hdr; > + > + hdr = (struct rte_mempool_objhdr *)RTE_PTR_SUB(elt, > sizeof(*hdr)); > + > + if (rte_eal_iova_mode() == RTE_IOVA_VA) > + hdr->physaddr = (uintptr_t)elt; > + > return hdr->physaddr; > } >
This overrides the physaddr field in the object hdr, this is surely not what you want (note that hdr was const). This change could at least take place in mempool_add_elem(). There is even maybe no need to change rte_mempool at all: if rte_memzone_reserve() already returns the proper address in memzone->phys_addr, it should be transparent. I didn't check the patchset in detail, but in my understanding, what we call physaddr in dpdk is actually a bus address. Shouldn't we start to rename some of these fields and functions to avoid confusion? Thanks, Olivier