[dpdk-dev] [PATCH v2 11/12] mempool: honor iova mode in virt2phy
Olivier Matz
olivier.matz at 6wind.com
Mon Jul 10 14:27:06 CEST 2017
On Mon, 10 Jul 2017 11:42:34 +0000, Santosh Shukla <santosh.shukla at caviumnetworks.com> wrote:
> Check iova mode and accordingly return phy addr.
>
> Signed-off-by: Santosh Shukla <santosh.shukla at caviumnetworks.com>
> Signed-off-by: Jerin Jacob <jerin.jacob at 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
More information about the dev
mailing list