Skip to content

Commit

Permalink
net/nfp: free HW ring memzone on queue release
Browse files Browse the repository at this point in the history
[ upstream commit 15174c4 ]

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: b812daa ("nfp: add Rx and Tx")

Signed-off-by: Heinrich Kuhn <heinrich.kuhn@corigine.com>
Signed-off-by: Simon Horman <simon.horman@corigine.com>
  • Loading branch information
Heinrich Kuhn authored and kevintraynor committed Feb 21, 2022
1 parent 961922e commit 9d6db3c
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 0 deletions.
2 changes: 2 additions & 0 deletions drivers/net/nfp/nfp_ethdev.c
Expand Up @@ -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*/
Expand Down
2 changes: 2 additions & 0 deletions drivers/net/nfp/nfp_ethdev_vf.c
Expand Up @@ -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);
Expand Down
2 changes: 2 additions & 0 deletions drivers/net/nfp/nfp_rxtx.c
Expand Up @@ -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);
}
Expand Down Expand Up @@ -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);
}
Expand Down

0 comments on commit 9d6db3c

Please sign in to comment.