Hi Renata, Looks good to me except to minor notes below.
It is better to use: --to-cmd ./devtools/get-maintainer.sh --cc dev@dpdk.org to have required list of maintainers directly specified. On 6/23/20 4:42 PM, Renata Saiakhova wrote: > Free previously allocated memzone for HW rings > > Signed-off-by: Renata Saiakhova <renata.saiakh...@ekinops.com> with minor notes below fixed: Acked-by: Andrew Rybchenko <arybche...@solarflare.com> > --- > lib/librte_ethdev/rte_ethdev.c | 30 ++++++++++++++++++++++-- > lib/librte_ethdev/rte_ethdev_driver.h | 17 ++++++++++++++ > lib/librte_ethdev/rte_ethdev_version.map | 7 ++++++ > 3 files changed, 52 insertions(+), 2 deletions(-) > > diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c > index 8e10a6fc3..e378489a6 100644 > --- a/lib/librte_ethdev/rte_ethdev.c > +++ b/lib/librte_ethdev/rte_ethdev.c > @@ -4184,6 +4184,10 @@ rte_eth_dev_rx_intr_ctl_q_get_fd(uint16_t port_id, > uint16_t queue_id) > return fd; > } > > +#define ETH_DMA_MZONE_NAME(_name, _port_id, _queue_id, _ring_name) \ > + snprintf(_name, sizeof(_name), "eth_p%d_q%d_%s", \ > + _port_id, _queue_id, _ring_name) > + I think that small static function would be better here. The macro is used to hide "sizeof(_name)", but I don't think it is good, since it is error-prone if _name is a pointer (not an array). > const struct rte_memzone * > rte_eth_dma_zone_reserve(const struct rte_eth_dev *dev, const char > *ring_name, > uint16_t queue_id, size_t size, unsigned align, > @@ -4193,8 +4197,7 @@ rte_eth_dma_zone_reserve(const struct rte_eth_dev *dev, > const char *ring_name, > const struct rte_memzone *mz; > int rc; > > - rc = snprintf(z_name, sizeof(z_name), "eth_p%d_q%d_%s", > - dev->data->port_id, queue_id, ring_name); > + rc = ETH_DMA_MZONE_NAME(z_name, dev->data->port_id, queue_id, > ring_name); > if (rc >= RTE_MEMZONE_NAMESIZE) { > RTE_ETHDEV_LOG(ERR, "ring name too long\n"); > rte_errno = ENAMETOOLONG; > @@ -4209,6 +4212,29 @@ rte_eth_dma_zone_reserve(const struct rte_eth_dev > *dev, const char *ring_name, > RTE_MEMZONE_IOVA_CONTIG, align); > } > > +int > +rte_eth_dma_zone_free(const struct rte_eth_dev *dev, const char *ring_name, > + uint16_t queue_id) > +{ > + char z_name[RTE_MEMZONE_NAMESIZE]; > + const struct rte_memzone *mz; > + int rc = 0; > + > + rc = ETH_DMA_MZONE_NAME(z_name, dev->data->port_id, queue_id, > ring_name); > + if (rc >= RTE_MEMZONE_NAMESIZE) { > + RTE_ETHDEV_LOG(ERR, "ring name too long\n"); > + return -ENAMETOOLONG; > + } > + > + mz = rte_memzone_lookup(z_name); > + if (mz) > + rc = rte_memzone_free(mz); > + else > + rc = -EINVAL; May be -ENOENT is better here? > + > + return rc; > +} > + > int > rte_eth_dev_create(struct rte_device *device, const char *name, > size_t priv_data_size, > diff --git a/lib/librte_ethdev/rte_ethdev_driver.h > b/lib/librte_ethdev/rte_ethdev_driver.h > index 99d4cd6cd..13fd049c0 100644 > --- a/lib/librte_ethdev/rte_ethdev_driver.h > +++ b/lib/librte_ethdev/rte_ethdev_driver.h > @@ -180,6 +180,23 @@ rte_eth_dma_zone_reserve(const struct rte_eth_dev > *eth_dev, const char *name, > uint16_t queue_id, size_t size, > unsigned align, int socket_id); > > +/** > + * Free previously allocated memzone for HW rings. > + * > + * @param eth_dev > + * The *eth_dev* pointer is the address of the *rte_eth_dev* structure > + * @param name > + * The name of the memory zone > + * @param queue_id > + * The index of the queue to add to name > + * @return > + * Negative errno value on error, 0 on success. > + */ > +__rte_internal > +int > +rte_eth_dma_zone_free(const struct rte_eth_dev *eth_dev, const char *name, > + uint16_t queue_id); > + > /** > * @internal > * Atomically set the link status for the specific device. > diff --git a/lib/librte_ethdev/rte_ethdev_version.map > b/lib/librte_ethdev/rte_ethdev_version.map > index 715505604..664d6b86a 100644 > --- a/lib/librte_ethdev/rte_ethdev_version.map > +++ b/lib/librte_ethdev/rte_ethdev_version.map > @@ -242,3 +242,10 @@ EXPERIMENTAL { > __rte_ethdev_trace_tx_burst; > rte_flow_get_aged_flows; > }; > + > +INTERNAL { > + global: > + > + rte_eth_dma_zone_free; > +}; > + >