On 6/19/2015 12:29 AM, Iremonger, Bernard wrote: >> -----Original Message----- >> From: Qiu, Michael >> Sent: Wednesday, June 17, 2015 8:59 AM >> To: dev at 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 <michael.qiu at intel.com> > Hi Michael, > > There are two comments inline. > > >> --- >> 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- >>> 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 > >> + } >> + >> + if (dev->data->rx_queues) { >> + for (i = 0; i < dev->data->nb_rx_queues; i++) >> + fm10k_rx_queue_release(dev->data- >>> 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; > >> + } >> } >> >> 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 >