* [dpdk-dev] [PATCH v2 0/4] Memory corruption due to HW rings allocation
@ 2020-05-13 9:15 Renata Saiakhova
2020-05-13 9:15 ` [dpdk-dev] [PATCH v2 1/4] librte_ethdev: Introduce a function to release HW rings Renata Saiakhova
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Renata Saiakhova @ 2020-05-13 9:15 UTC (permalink / raw)
Cc: dev, Renata Saiakhova
igb and ixgbe and some other drivers allocate HW rings using rte_eth_dma_zone_reserve(),
which checks first if the memzone exists for a given name, consisting of port
id, queue_id, rx/tx direction, but not for the size, alignment, and socket_id.
If the memzone with a given name exists it is returned, otherwise it is
allocated.
Disconnecting dpdk port from one type of interface (igb) and connecting it
to another type of interface (ixgbe) for the same port id, potentially creates
memory overlap and corruption, because it may require memzone of bigger size.
That's what is happening from switching from igb to ixgbe having the same port
id.
Renata Saiakhova (4):
librte_ethdev: Introduce a function to release HW rings
drivers/net: Fix in igb and ixgbe HW rings memory
drivers/net: Fix in i40e HW rings memory overlap
drivers/net: Fix in em and ice HW rings memory overlap
drivers/net/e1000/em_rxtx.c | 2 ++
drivers/net/e1000/igb_rxtx.c | 2 ++
drivers/net/i40e/i40e_rxtx.c | 2 ++
drivers/net/ice/ice_rxtx.c | 2 ++
drivers/net/ixgbe/ixgbe_rxtx.c | 2 ++
lib/librte_ethdev/rte_ethdev.c | 30 ++++++++++++++++++++++--
lib/librte_ethdev/rte_ethdev_driver.h | 19 +++++++++++++++
lib/librte_ethdev/rte_ethdev_version.map | 1 +
8 files changed, 58 insertions(+), 2 deletions(-)
--
2.17.2
^ permalink raw reply [flat|nested] 8+ messages in thread
* [dpdk-dev] [PATCH v2 1/4] librte_ethdev: Introduce a function to release HW rings
2020-05-13 9:15 [dpdk-dev] [PATCH v2 0/4] Memory corruption due to HW rings allocation Renata Saiakhova
@ 2020-05-13 9:15 ` Renata Saiakhova
2020-05-13 9:48 ` Burakov, Anatoly
` (2 more replies)
2020-05-13 9:15 ` [dpdk-dev] [PATCH v2 2/4] drivers/net: Fix in igb and ixgbe HW rings memory Renata Saiakhova
` (2 subsequent siblings)
3 siblings, 3 replies; 8+ messages in thread
From: Renata Saiakhova @ 2020-05-13 9:15 UTC (permalink / raw)
To: Thomas Monjalon, Ferruh Yigit, Andrew Rybchenko, Ray Kinsella,
Neil Horman
Cc: dev, Renata Saiakhova
Free previously allocated memzone for HW rings
Signed-off-by: Renata Saiakhova <Renata.Saiakhova@ekinops.com>
---
lib/librte_ethdev/rte_ethdev.c | 30 ++++++++++++++++++++++--
lib/librte_ethdev/rte_ethdev_driver.h | 19 +++++++++++++++
lib/librte_ethdev/rte_ethdev_version.map | 1 +
3 files changed, 48 insertions(+), 2 deletions(-)
diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
index 72aed59a5..7200ef48c 100644
--- a/lib/librte_ethdev/rte_ethdev.c
+++ b/lib/librte_ethdev/rte_ethdev.c
@@ -4181,6 +4181,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)
+
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,
@@ -4190,8 +4194,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;
@@ -4206,6 +4209,29 @@ rte_eth_dma_zone_reserve(const struct rte_eth_dev *dev, const char *ring_name,
RTE_MEMZONE_IOVA_CONTIG, align);
}
+int __rte_experimental
+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);
+
+ return rc;
+}
+
+#undef ETH_DMA_MZONE_NAME
+
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..f32d55720 100644
--- a/lib/librte_ethdev/rte_ethdev_driver.h
+++ b/lib/librte_ethdev/rte_ethdev_driver.h
@@ -180,6 +180,25 @@ 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);
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice.
+ *
+ * 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.
+ */
+int __rte_experimental
+rte_eth_dma_zone_free(const struct rte_eth_dev *dev, const char *ring_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..139a81302 100644
--- a/lib/librte_ethdev/rte_ethdev_version.map
+++ b/lib/librte_ethdev/rte_ethdev_version.map
@@ -241,4 +241,5 @@ EXPERIMENTAL {
__rte_ethdev_trace_rx_burst;
__rte_ethdev_trace_tx_burst;
rte_flow_get_aged_flows;
+ rte_eth_dma_zone_free;
};
--
2.17.2
^ permalink raw reply [flat|nested] 8+ messages in thread
* [dpdk-dev] [PATCH v2 2/4] drivers/net: Fix in igb and ixgbe HW rings memory
2020-05-13 9:15 [dpdk-dev] [PATCH v2 0/4] Memory corruption due to HW rings allocation Renata Saiakhova
2020-05-13 9:15 ` [dpdk-dev] [PATCH v2 1/4] librte_ethdev: Introduce a function to release HW rings Renata Saiakhova
@ 2020-05-13 9:15 ` Renata Saiakhova
2020-05-13 9:15 ` [dpdk-dev] [PATCH v2 3/4] drivers/net: Fix in i40e HW rings memory overlap Renata Saiakhova
2020-05-13 9:15 ` [dpdk-dev] [PATCH v2 4/4] drivers/net: Fix in em and ice " Renata Saiakhova
3 siblings, 0 replies; 8+ messages in thread
From: Renata Saiakhova @ 2020-05-13 9:15 UTC (permalink / raw)
To: Wei Zhao, Jeff Guo; +Cc: dev, Renata Saiakhova
Delete memzones for HW rings in igb and ixgbe while freeing queues
Signed-off-by: Renata Saiakhova <Renata.Saiakhova@ekinops.com>
---
drivers/net/e1000/igb_rxtx.c | 2 ++
drivers/net/ixgbe/ixgbe_rxtx.c | 2 ++
2 files changed, 4 insertions(+)
diff --git a/drivers/net/e1000/igb_rxtx.c b/drivers/net/e1000/igb_rxtx.c
index 684fa4ad8..fe80c0f0d 100644
--- a/drivers/net/e1000/igb_rxtx.c
+++ b/drivers/net/e1000/igb_rxtx.c
@@ -1884,12 +1884,14 @@ igb_dev_free_queues(struct rte_eth_dev *dev)
for (i = 0; i < dev->data->nb_rx_queues; i++) {
eth_igb_rx_queue_release(dev->data->rx_queues[i]);
dev->data->rx_queues[i] = NULL;
+ rte_eth_dma_zone_free(dev, "rx_ring", i);
}
dev->data->nb_rx_queues = 0;
for (i = 0; i < dev->data->nb_tx_queues; i++) {
eth_igb_tx_queue_release(dev->data->tx_queues[i]);
dev->data->tx_queues[i] = NULL;
+ rte_eth_dma_zone_free(dev, "tx_ring", i);
}
dev->data->nb_tx_queues = 0;
}
diff --git a/drivers/net/ixgbe/ixgbe_rxtx.c b/drivers/net/ixgbe/ixgbe_rxtx.c
index 2e20e18c7..977ecf513 100644
--- a/drivers/net/ixgbe/ixgbe_rxtx.c
+++ b/drivers/net/ixgbe/ixgbe_rxtx.c
@@ -3368,12 +3368,14 @@ ixgbe_dev_free_queues(struct rte_eth_dev *dev)
for (i = 0; i < dev->data->nb_rx_queues; i++) {
ixgbe_dev_rx_queue_release(dev->data->rx_queues[i]);
dev->data->rx_queues[i] = NULL;
+ rte_eth_dma_zone_free(dev, "rx_ring", i);
}
dev->data->nb_rx_queues = 0;
for (i = 0; i < dev->data->nb_tx_queues; i++) {
ixgbe_dev_tx_queue_release(dev->data->tx_queues[i]);
dev->data->tx_queues[i] = NULL;
+ rte_eth_dma_zone_free(dev, "tx_ring", i);
}
dev->data->nb_tx_queues = 0;
}
--
2.17.2
^ permalink raw reply [flat|nested] 8+ messages in thread
* [dpdk-dev] [PATCH v2 3/4] drivers/net: Fix in i40e HW rings memory overlap
2020-05-13 9:15 [dpdk-dev] [PATCH v2 0/4] Memory corruption due to HW rings allocation Renata Saiakhova
2020-05-13 9:15 ` [dpdk-dev] [PATCH v2 1/4] librte_ethdev: Introduce a function to release HW rings Renata Saiakhova
2020-05-13 9:15 ` [dpdk-dev] [PATCH v2 2/4] drivers/net: Fix in igb and ixgbe HW rings memory Renata Saiakhova
@ 2020-05-13 9:15 ` Renata Saiakhova
2020-05-13 9:15 ` [dpdk-dev] [PATCH v2 4/4] drivers/net: Fix in em and ice " Renata Saiakhova
3 siblings, 0 replies; 8+ messages in thread
From: Renata Saiakhova @ 2020-05-13 9:15 UTC (permalink / raw)
To: Beilei Xing, Jeff Guo; +Cc: dev, Renata Saiakhova
Delete memzones for HW rings in i40e while freeing queues
Signed-off-by: Renata Saiakhova <Renata.Saiakhova@ekinops.com>
---
drivers/net/i40e/i40e_rxtx.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c
index 5e7c86ed8..99cec9b99 100644
--- a/drivers/net/i40e/i40e_rxtx.c
+++ b/drivers/net/i40e/i40e_rxtx.c
@@ -2900,6 +2900,7 @@ i40e_dev_free_queues(struct rte_eth_dev *dev)
continue;
i40e_dev_rx_queue_release(dev->data->rx_queues[i]);
dev->data->rx_queues[i] = NULL;
+ rte_eth_dma_zone_free(dev, "rx_ring", i);
}
for (i = 0; i < dev->data->nb_tx_queues; i++) {
@@ -2907,6 +2908,7 @@ i40e_dev_free_queues(struct rte_eth_dev *dev)
continue;
i40e_dev_tx_queue_release(dev->data->tx_queues[i]);
dev->data->tx_queues[i] = NULL;
+ rte_eth_dma_zone_free(dev, "tx_ring", i);
}
}
--
2.17.2
^ permalink raw reply [flat|nested] 8+ messages in thread
* [dpdk-dev] [PATCH v2 4/4] drivers/net: Fix in em and ice HW rings memory overlap
2020-05-13 9:15 [dpdk-dev] [PATCH v2 0/4] Memory corruption due to HW rings allocation Renata Saiakhova
` (2 preceding siblings ...)
2020-05-13 9:15 ` [dpdk-dev] [PATCH v2 3/4] drivers/net: Fix in i40e HW rings memory overlap Renata Saiakhova
@ 2020-05-13 9:15 ` Renata Saiakhova
3 siblings, 0 replies; 8+ messages in thread
From: Renata Saiakhova @ 2020-05-13 9:15 UTC (permalink / raw)
To: Wei Zhao, Jeff Guo, Qiming Yang, Wenzhuo Lu; +Cc: dev, Renata Saiakhova
Delete memzones for HW rings in em and ice while freeing queues
Signed-off-by: Renata Saiakhova <Renata.Saiakhova@ekinops.com>
---
drivers/net/e1000/em_rxtx.c | 2 ++
drivers/net/ice/ice_rxtx.c | 2 ++
2 files changed, 4 insertions(+)
diff --git a/drivers/net/e1000/em_rxtx.c b/drivers/net/e1000/em_rxtx.c
index 49c53712a..67a271e8c 100644
--- a/drivers/net/e1000/em_rxtx.c
+++ b/drivers/net/e1000/em_rxtx.c
@@ -1611,12 +1611,14 @@ em_dev_free_queues(struct rte_eth_dev *dev)
for (i = 0; i < dev->data->nb_rx_queues; i++) {
eth_em_rx_queue_release(dev->data->rx_queues[i]);
dev->data->rx_queues[i] = NULL;
+ rte_eth_dma_zone_free(dev, "rx_ring", i);
}
dev->data->nb_rx_queues = 0;
for (i = 0; i < dev->data->nb_tx_queues; i++) {
eth_em_tx_queue_release(dev->data->tx_queues[i]);
dev->data->tx_queues[i] = NULL;
+ rte_eth_dma_zone_free(dev, "tx_ring", i);
}
dev->data->nb_tx_queues = 0;
}
diff --git a/drivers/net/ice/ice_rxtx.c b/drivers/net/ice/ice_rxtx.c
index 1c9f31efd..7c2dad9d6 100644
--- a/drivers/net/ice/ice_rxtx.c
+++ b/drivers/net/ice/ice_rxtx.c
@@ -1905,6 +1905,7 @@ ice_free_queues(struct rte_eth_dev *dev)
continue;
ice_rx_queue_release(dev->data->rx_queues[i]);
dev->data->rx_queues[i] = NULL;
+ rte_eth_dma_zone_free(dev, "rx_ring", i);
}
dev->data->nb_rx_queues = 0;
@@ -1913,6 +1914,7 @@ ice_free_queues(struct rte_eth_dev *dev)
continue;
ice_tx_queue_release(dev->data->tx_queues[i]);
dev->data->tx_queues[i] = NULL;
+ rte_eth_dma_zone_free(dev, "tx_ring", i);
}
dev->data->nb_tx_queues = 0;
}
--
2.17.2
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [dpdk-dev] [PATCH v2 1/4] librte_ethdev: Introduce a function to release HW rings
2020-05-13 9:15 ` [dpdk-dev] [PATCH v2 1/4] librte_ethdev: Introduce a function to release HW rings Renata Saiakhova
@ 2020-05-13 9:48 ` Burakov, Anatoly
2020-05-13 11:00 ` Neil Horman
2020-05-14 7:07 ` Ray Kinsella
2 siblings, 0 replies; 8+ messages in thread
From: Burakov, Anatoly @ 2020-05-13 9:48 UTC (permalink / raw)
To: Renata Saiakhova, Thomas Monjalon, Ferruh Yigit,
Andrew Rybchenko, Ray Kinsella, Neil Horman
Cc: dev
On 13-May-20 10:15 AM, Renata Saiakhova wrote:
> Free previously allocated memzone for HW rings
>
> Signed-off-by: Renata Saiakhova <Renata.Saiakhova@ekinops.com>
> ---
> lib/librte_ethdev/rte_ethdev.c | 30 ++++++++++++++++++++++--
> lib/librte_ethdev/rte_ethdev_driver.h | 19 +++++++++++++++
> lib/librte_ethdev/rte_ethdev_version.map | 1 +
> 3 files changed, 48 insertions(+), 2 deletions(-)
>
> diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
> index 72aed59a5..7200ef48c 100644
> --- a/lib/librte_ethdev/rte_ethdev.c
> +++ b/lib/librte_ethdev/rte_ethdev.c
> @@ -4181,6 +4181,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)
> +
> 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,
> @@ -4190,8 +4194,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;
> @@ -4206,6 +4209,29 @@ rte_eth_dma_zone_reserve(const struct rte_eth_dev *dev, const char *ring_name,
> RTE_MEMZONE_IOVA_CONTIG, align);
> }
>
> +int __rte_experimental
> +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);
> +
> + return rc;
> +}
> +
> +#undef ETH_DMA_MZONE_NAME
Not sure #undef is necessary in a .c file :)
Otherwise LGTM
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
--
Thanks,
Anatoly
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [dpdk-dev] [PATCH v2 1/4] librte_ethdev: Introduce a function to release HW rings
2020-05-13 9:15 ` [dpdk-dev] [PATCH v2 1/4] librte_ethdev: Introduce a function to release HW rings Renata Saiakhova
2020-05-13 9:48 ` Burakov, Anatoly
@ 2020-05-13 11:00 ` Neil Horman
2020-05-14 7:07 ` Ray Kinsella
2 siblings, 0 replies; 8+ messages in thread
From: Neil Horman @ 2020-05-13 11:00 UTC (permalink / raw)
To: Renata Saiakhova
Cc: Thomas Monjalon, Ferruh Yigit, Andrew Rybchenko, Ray Kinsella, dev
On Wed, May 13, 2020 at 11:15:44AM +0200, Renata Saiakhova wrote:
> Free previously allocated memzone for HW rings
>
> Signed-off-by: Renata Saiakhova <Renata.Saiakhova@ekinops.com>
> ---
> lib/librte_ethdev/rte_ethdev.c | 30 ++++++++++++++++++++++--
> lib/librte_ethdev/rte_ethdev_driver.h | 19 +++++++++++++++
> lib/librte_ethdev/rte_ethdev_version.map | 1 +
> 3 files changed, 48 insertions(+), 2 deletions(-)
>
> diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
> index 72aed59a5..7200ef48c 100644
> --- a/lib/librte_ethdev/rte_ethdev.c
> +++ b/lib/librte_ethdev/rte_ethdev.c
> @@ -4181,6 +4181,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)
> +
> 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,
> @@ -4190,8 +4194,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;
> @@ -4206,6 +4209,29 @@ rte_eth_dma_zone_reserve(const struct rte_eth_dev *dev, const char *ring_name,
> RTE_MEMZONE_IOVA_CONTIG, align);
> }
>
> +int __rte_experimental
> +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);
> +
> + return rc;
> +}
> +
> +#undef ETH_DMA_MZONE_NAME
Agree with Anatoly, this isn't needed, and will cause confusion if more
functions are added using this macro later
Otherwise, looks good.
Neil
> +
> 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..f32d55720 100644
> --- a/lib/librte_ethdev/rte_ethdev_driver.h
> +++ b/lib/librte_ethdev/rte_ethdev_driver.h
> @@ -180,6 +180,25 @@ 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);
>
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice.
> + *
> + * 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.
> + */
> +int __rte_experimental
> +rte_eth_dma_zone_free(const struct rte_eth_dev *dev, const char *ring_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..139a81302 100644
> --- a/lib/librte_ethdev/rte_ethdev_version.map
> +++ b/lib/librte_ethdev/rte_ethdev_version.map
> @@ -241,4 +241,5 @@ EXPERIMENTAL {
> __rte_ethdev_trace_rx_burst;
> __rte_ethdev_trace_tx_burst;
> rte_flow_get_aged_flows;
> + rte_eth_dma_zone_free;
> };
> --
> 2.17.2
>
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [dpdk-dev] [PATCH v2 1/4] librte_ethdev: Introduce a function to release HW rings
2020-05-13 9:15 ` [dpdk-dev] [PATCH v2 1/4] librte_ethdev: Introduce a function to release HW rings Renata Saiakhova
2020-05-13 9:48 ` Burakov, Anatoly
2020-05-13 11:00 ` Neil Horman
@ 2020-05-14 7:07 ` Ray Kinsella
2 siblings, 0 replies; 8+ messages in thread
From: Ray Kinsella @ 2020-05-14 7:07 UTC (permalink / raw)
To: Renata Saiakhova, Thomas Monjalon, Ferruh Yigit,
Andrew Rybchenko, Neil Horman
Cc: dev
On 13/05/2020 10:15, Renata Saiakhova wrote:
> diff --git a/lib/librte_ethdev/rte_ethdev_version.map b/lib/librte_ethdev/rte_ethdev_version.map
> index 715505604..139a81302 100644
> --- a/lib/librte_ethdev/rte_ethdev_version.map
> +++ b/lib/librte_ethdev/rte_ethdev_version.map
> @@ -241,4 +241,5 @@ EXPERIMENTAL {
> __rte_ethdev_trace_rx_burst;
> __rte_ethdev_trace_tx_burst;
> rte_flow_get_aged_flows;
> + rte_eth_dma_zone_free;
> };
Minor niggle rte_eth is alphabetically before rte_flow_get_aged_flows.
Although I note that not all additions to EXPERIMENTAL, have been consistent in this regard.
Ray K
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2020-05-14 7:07 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-13 9:15 [dpdk-dev] [PATCH v2 0/4] Memory corruption due to HW rings allocation Renata Saiakhova
2020-05-13 9:15 ` [dpdk-dev] [PATCH v2 1/4] librte_ethdev: Introduce a function to release HW rings Renata Saiakhova
2020-05-13 9:48 ` Burakov, Anatoly
2020-05-13 11:00 ` Neil Horman
2020-05-14 7:07 ` Ray Kinsella
2020-05-13 9:15 ` [dpdk-dev] [PATCH v2 2/4] drivers/net: Fix in igb and ixgbe HW rings memory Renata Saiakhova
2020-05-13 9:15 ` [dpdk-dev] [PATCH v2 3/4] drivers/net: Fix in i40e HW rings memory overlap Renata Saiakhova
2020-05-13 9:15 ` [dpdk-dev] [PATCH v2 4/4] drivers/net: Fix in em and ice " Renata Saiakhova
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).