[dpdk-stable] [dpdk-dev] [EXT] Re: [PATCH] ethdev: fix DMA zone reserve not honoring size
Andrew Rybchenko
arybchenko at solarflare.com
Tue Apr 2 09:36:12 CEST 2019
On 4/2/19 3:47 AM, Jerin Jacob Kollanukkaran wrote:
> On Mon, 2019-04-01 at 10:30 +0300, Andrew Rybchenko wrote:
>> External Email
>> 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.
> Why? Is due to API name?
1. The problem really exists. The problem is bad and it very good that you
caught it and came up with a patch. Many thanks.
2. Silently free and reallocate memory is bad. Memory could be
used/mapped etc.
3. As an absolute minimum if we accept the behaviour it must be documented
in the function description.
> If so,
> Can we have rte_eth_dma_zone_reservere_with_resize() then ?
> or any another name, You would like to have?
4. I'd prefer an error if different size (or bigger) memzone is requested,
but I understand that it can break existing drivers.
Thomas, Ferruh, what do you think?
>> I understand the motivation, but I don't think the solution is
>> correct.
> What you think it has correct solution then?
See above plus handling in drivers or dedicated function with
better name as you suggest above.
> Obviously, We can not allocate max ring size in init time.
> If the NIC has support for 64K HW ring, We will be wasting too much as
> it is per queue.
Yes, I agree that it is an overkill.
net/sfc tries to carefully free/reserve on NIC/queues reconfigure.
Many thanks,
Andrew.
More information about the stable
mailing list