[dpdk-dev] [PATCH] ethdev: fix DMA zone reserve not honoring size
Andrew Rybchenko
arybchenko at solarflare.com
Mon Apr 1 09:30:33 CEST 2019
On 3/31/19 7:25 PM, Pavan Nikhilesh Bhagavatula wrote:
> From: Pavan Nikhilesh <pbhagavatula at marvell.com>
>
> The `rte_eth_dma_zone_reserve()` is generally used to create HW rings.
> In some scenarios when a driver needs to reconfigure the ring size
> since the named memzone already exists it returns the previous memzone
> without checking if a different sized ring is requested.
>
> Introduce a check to see if the ring size requested is different from the
> previously created memzone length.
>
> Fixes: 719dbebceb81 ("xen: allow determining DOM0 at runtime")
> Cc: stable at dpdk.org
>
> Signed-off-by: Pavan Nikhilesh <pbhagavatula at marvell.com>
> ---
> lib/librte_ethdev/rte_ethdev.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
> index 12b66b68c..4ae12e43b 100644
> --- a/lib/librte_ethdev/rte_ethdev.c
> +++ b/lib/librte_ethdev/rte_ethdev.c
> @@ -3604,9 +3604,12 @@ rte_eth_dma_zone_reserve(const struct rte_eth_dev *dev, const char *ring_name,
> }
>
> mz = rte_memzone_lookup(z_name);
> - if (mz)
> + if (mz && (mz->len == size))
> return mz;
>
> + if (mz)
> + rte_memzone_free(mz);
NACK
I really don't like that API which should reserve does free if requested
size does not match previously allocated.
I understand the motivation, but I don't think the solution is correct.
> +
> return rte_memzone_reserve_aligned(z_name, size, socket_id,
> RTE_MEMZONE_IOVA_CONTIG, align);
> }
More information about the dev
mailing list