From 15174c40b70dfa89c1d94ff93ae756fae8d471bc Mon Sep 17 00:00:00 2001 From: Heinrich Kuhn Date: Wed, 19 Jan 2022 13:48:00 +0200 Subject: [PATCH] net/nfp: free HW ring memzone on queue release During Rx/Tx queue setup, memory is reserved for the hardware rings. This memory zone should subsequently be freed in the queue release logic. This commit also adds a call to the release logic in the dev_close() callback so that the ring memzone may be freed during port close too. Fixes: b812daadad0d ("nfp: add Rx and Tx") Cc: stable@dpdk.org Signed-off-by: Heinrich Kuhn Signed-off-by: Simon Horman --- drivers/net/nfp/nfp_ethdev.c | 2 ++ drivers/net/nfp/nfp_ethdev_vf.c | 2 ++ drivers/net/nfp/nfp_rxtx.c | 2 ++ 3 files changed, 6 insertions(+) diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c index 8e81cc498f..9166f65da3 100644 --- a/drivers/net/nfp/nfp_ethdev.c +++ b/drivers/net/nfp/nfp_ethdev.c @@ -302,11 +302,13 @@ nfp_net_close(struct rte_eth_dev *dev) for (i = 0; i < dev->data->nb_tx_queues; i++) { this_tx_q = (struct nfp_net_txq *)dev->data->tx_queues[i]; nfp_net_reset_tx_queue(this_tx_q); + nfp_net_tx_queue_release(dev, i); } for (i = 0; i < dev->data->nb_rx_queues; i++) { this_rx_q = (struct nfp_net_rxq *)dev->data->rx_queues[i]; nfp_net_reset_rx_queue(this_rx_q); + nfp_net_rx_queue_release(dev, i); } /* Cancel possible impending LSC work here before releasing the port*/ diff --git a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c index 303ef72b1b..0034d68ea6 100644 --- a/drivers/net/nfp/nfp_ethdev_vf.c +++ b/drivers/net/nfp/nfp_ethdev_vf.c @@ -219,11 +219,13 @@ nfp_netvf_close(struct rte_eth_dev *dev) for (i = 0; i < dev->data->nb_tx_queues; i++) { this_tx_q = (struct nfp_net_txq *)dev->data->tx_queues[i]; nfp_net_reset_tx_queue(this_tx_q); + nfp_net_tx_queue_release(dev, i); } for (i = 0; i < dev->data->nb_rx_queues; i++) { this_rx_q = (struct nfp_net_rxq *)dev->data->rx_queues[i]; nfp_net_reset_rx_queue(this_rx_q); + nfp_net_rx_queue_release(dev, i); } rte_intr_disable(pci_dev->intr_handle); diff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c index 0fe1415596..335a90b2c9 100644 --- a/drivers/net/nfp/nfp_rxtx.c +++ b/drivers/net/nfp/nfp_rxtx.c @@ -470,6 +470,7 @@ nfp_net_rx_queue_release(struct rte_eth_dev *dev, uint16_t queue_idx) if (rxq) { nfp_net_rx_queue_release_mbufs(rxq); + rte_eth_dma_zone_free(dev, "rx_ring", queue_idx); rte_free(rxq->rxbufs); rte_free(rxq); } @@ -660,6 +661,7 @@ nfp_net_tx_queue_release(struct rte_eth_dev *dev, uint16_t queue_idx) if (txq) { nfp_net_tx_queue_release_mbufs(txq); + rte_eth_dma_zone_free(dev, "tx_ring", queue_idx); rte_free(txq->txbufs); rte_free(txq); } -- 2.39.5