[dpdk-dev] [PATCH v2] net/nfb: remove resources when port is closed
From: Rastislav Cernay <hidden>
Date: 2019-08-12 11:19:59
Subsystem:
networking drivers, the rest · Maintainers:
Andrew Lunn, "David S. Miller", Eric Dumazet, Jakub Kicinski, Paolo Abeni, Linus Torvalds
From: Rastislav Cernay <redacted> The rte_eth_dev_close() function now handles freeing resources for devices (e.g., mac_addrs). To conform with the new close() behaviour we are asserting the RTE_ETH_DEV_CLOSE_REMOVE flag so that rte_eth_dev_close() releases all device level dynamic memory. Signed-off-by: Rastislav Cernay <redacted> Acked-by: Jan Remes <redacted> Reviewed-by: Xiaolong Ye <redacted> --- v2: remove unnecessary cast drivers/net/szedata2/rte_eth_szedata2.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/drivers/net/szedata2/rte_eth_szedata2.c b/drivers/net/szedata2/rte_eth_szedata2.c
index d5dec1b..99d5ca5 100644
--- a/drivers/net/szedata2/rte_eth_szedata2.c
+++ b/drivers/net/szedata2/rte_eth_szedata2.c@@ -1157,12 +1157,15 @@ struct szedata2_tx_queue { static void eth_dev_close(struct rte_eth_dev *dev) { + struct pmd_internals *internals = dev->data->dev_private; uint16_t i; uint16_t nb_rx = dev->data->nb_rx_queues; uint16_t nb_tx = dev->data->nb_tx_queues; eth_dev_stop(dev); + free(internals->sze_dev_path); + for (i = 0; i < nb_rx; i++) { eth_rx_queue_release(dev->data->rx_queues[i]); dev->data->rx_queues[i] = NULL;
@@ -1173,6 +1176,9 @@ struct szedata2_tx_queue { dev->data->tx_queues[i] = NULL; } dev->data->nb_tx_queues = 0; + + rte_free(dev->data->mac_addrs); + dev->data->mac_addrs = NULL; } static int
@@ -1475,6 +1481,9 @@ struct szedata2_tx_queue { PMD_INIT_LOG(INFO, "Initializing eth_dev %s (driver %s)", data->name, RTE_STR(RTE_SZEDATA2_DRIVER_NAME)); + /* Let rte_eth_dev_close() release the port resources */ + dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; + /* Fill internal private structure. */ internals->dev = dev; /* Get index of szedata2 device file and create path to device file */
@@ -1537,12 +1546,9 @@ struct szedata2_tx_queue { static int rte_szedata2_eth_dev_uninit(struct rte_eth_dev *dev) { - struct pmd_internals *internals = (struct pmd_internals *) - dev->data->dev_private; - PMD_INIT_FUNC_TRACE(); - free(internals->sze_dev_path); + eth_dev_close(dev); PMD_DRV_LOG(INFO, "%s device %s successfully uninitialized", RTE_STR(RTE_SZEDATA2_DRIVER_NAME), dev->data->name);
--
1.8.3.1