]> git.droids-corp.org - dpdk.git/commitdiff
net/nfp: free HW ring memzone on queue release
authorHeinrich Kuhn <heinrich.kuhn@corigine.com>
Wed, 19 Jan 2022 11:48:00 +0000 (13:48 +0200)
committerFerruh Yigit <ferruh.yigit@intel.com>
Wed, 26 Jan 2022 16:29:59 +0000 (17:29 +0100)
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 <heinrich.kuhn@corigine.com>
Signed-off-by: Simon Horman <simon.horman@corigine.com>
drivers/net/nfp/nfp_ethdev.c
drivers/net/nfp/nfp_ethdev_vf.c
drivers/net/nfp/nfp_rxtx.c

index 8e81cc498f4ca8d583558dadd9782beb931536b0..9166f65da39f840e9ff47314833954b283a6da0f 100644 (file)
@@ -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*/
index 303ef72b1b2dc919cf35d05dfac405c4fa6dadfa..0034d68ea63f506cec6f752c7f0766baa1e6995d 100644 (file)
@@ -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);
index 0fe1415596e0cbb61cc93ee2459bd2ffdbb01ead..335a90b2c95d0f0e524c94ad340d149ca9d0295b 100644 (file)
@@ -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);
        }