[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