Thread (35 messages) 35 messages, 5 authors, 2015-07-19

Re: [PATCH 1/2 v2] fm10k: Free queues when close port

From: Qiu, Michael <hidden>
Date: 2015-06-19 07:36:08

On 6/19/2015 12:29 AM, Iremonger, Bernard wrote:
quoted
-----Original Message-----
From: Qiu, Michael
Sent: Wednesday, June 17, 2015 8:59 AM
To: dev@dpdk.org
Cc: Chen, Jing D; Iremonger, Bernard; He, Shaopeng; Qiu, Michael
Subject: [PATCH 1/2 v2] fm10k: Free queues when close port

When close a port, lots of memory should be released, such as software
rings, queues, etc.

Signed-off-by: Michael Qiu <redacted>
Hi Michael,

There are two comments inline.

quoted
---
change log:
 v2 --> v1: remove __rte_unused flag

 drivers/net/fm10k/fm10k_ethdev.c | 37
+++++++++++++++++++++++++++++++++----
 1 file changed, 33 insertions(+), 4 deletions(-)
diff --git a/drivers/net/fm10k/fm10k_ethdev.c
b/drivers/net/fm10k/fm10k_ethdev.c
index 87852ed..e310698 100644
--- a/drivers/net/fm10k/fm10k_ethdev.c
+++ b/drivers/net/fm10k/fm10k_ethdev.c
@@ -52,6 +52,10 @@

 static void fm10k_close_mbx_service(struct fm10k_hw *hw);

+static void fm10k_tx_queue_release(void *queue);
+
+static void fm10k_rx_queue_release(void *queue);
+
 static void
 fm10k_mbx_initlock(struct fm10k_hw *hw)  { @@ -665,11 +669,35 @@
fm10k_dev_stop(struct rte_eth_dev *dev)

 	PMD_INIT_FUNC_TRACE();

-	for (i = 0; i < dev->data->nb_tx_queues; i++)
-		fm10k_dev_tx_queue_stop(dev, i);
+	if (dev->data->tx_queues)
+		for (i = 0; i < dev->data->nb_tx_queues; i++)
+			fm10k_dev_tx_queue_stop(dev, i);
+
+	if (dev->data->rx_queues)
+		for (i = 0; i < dev->data->nb_rx_queues; i++)
+			fm10k_dev_rx_queue_stop(dev, i);
+}

-	for (i = 0; i < dev->data->nb_rx_queues; i++)
-		fm10k_dev_rx_queue_stop(dev, i);
+static void
+fm10k_dev_queue_release(struct rte_eth_dev *dev) {
+	int i;
+
+	PMD_INIT_FUNC_TRACE();
+
+	if (dev->data->tx_queues) {
+		for (i = 0; i < dev->data->nb_tx_queues; i++)
+			fm10k_tx_queue_release(dev->data-
quoted
tx_queues[i]);
+		rte_free(dev->data->tx_queues);
+		dev->data->tx_queues = NULL;
The following line should be added here:
dev->data->nb_tx_queues = 0;
Hi, Bernard

dev->data->nb_tx_queues will be init as 0 in rte_eth_dev_tx_queue_config()

And it has no issue here, I think. But I can add and send out new version

Thanks,
Michael
quoted
+	}
+
+	if (dev->data->rx_queues) {
+		for (i = 0; i < dev->data->nb_rx_queues; i++)
+			fm10k_rx_queue_release(dev->data-
quoted
rx_queues[i]);
+		rte_free(dev->data->rx_queues);
+		dev->data->rx_queues = NULL;
The following line should be added here:
dev->data->nb_rx_queues = 0;
quoted
+	}
 }

 static void
@@ -682,6 +710,7 @@ fm10k_dev_close(struct rte_eth_dev *dev)
 	/* Stop mailbox service first */
 	fm10k_close_mbx_service(hw);
 	fm10k_dev_stop(dev);
+	fm10k_dev_queue_release(dev);
 	fm10k_stop_hw(hw);
 }

--
1.9.3
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help