On 2015/6/29 18:20, Iremonger, Bernard wrote: > >> -----Original Message----- >> From: Qiu, Michael >> Sent: Monday, June 29, 2015 9:55 AM >> To: Iremonger, Bernard; dev at dpdk.org >> Cc: Zhang, Helin; Ananyev, Konstantin; mukawa at igel.co.jp; Stephen >> Hemminger >> Subject: Re: [PATCH v2] librte_ether: release memory in uninit function. >> >> On 6/26/2015 5:32 PM, Iremonger, Bernard wrote: >>> Changes in v2: >>> do not free mac_addrs and hash_mac_addrs here. >>> >>> Signed-off-by: Bernard Iremonger <bernard.iremonger at intel.com> >>> --- >>> lib/librte_ether/rte_ethdev.c | 6 +++++- >>> 1 files changed, 5 insertions(+), 1 deletions(-) >>> >>> diff --git a/lib/librte_ether/rte_ethdev.c >>> b/lib/librte_ether/rte_ethdev.c index e13fde5..7ae101a 100644 >>> --- a/lib/librte_ether/rte_ethdev.c >>> +++ b/lib/librte_ether/rte_ethdev.c >>> @@ -369,8 +369,12 @@ rte_eth_dev_uninit(struct rte_pci_device >> *pci_dev) >>> /* free ether device */ >>> rte_eth_dev_release_port(eth_dev); >>> >>> - if (rte_eal_process_type() == RTE_PROC_PRIMARY) >>> + if (rte_eal_process_type() == RTE_PROC_PRIMARY) { >>> + rte_free(eth_dev->data->rx_queues); >>> + rte_free(eth_dev->data->tx_queues); >>> rte_free(eth_dev->data->dev_private); >>> + memset(eth_dev->data, 0, sizeof(struct >> rte_eth_dev_data)); >>> + } >>> >>> eth_dev->pci_dev = NULL; >>> eth_dev->driver = NULL; >> >> Actually, This could be put in rte_eth_dev_close() becasue queues should be >> released when closed. >> >> Also before free dev->data->rx_queues you should make sure >> dev->data->rx_queues[i] has been freed in PMD close() function, So this >> two should be better done at the same time, ether in >> rte_eth_dev_close() or in PMD close() function. For hotplug in fm10k, I put >> it >> in PMD close() function. >> >> Thanks, >> Michael > Hi Michael, > > The consensus is that the rx_queue and tx_queue memory should not be released > in the PMD as it is not allocated by the PMD. The memory is allocated in > rte_eth_dev_rx_queue_config() and rte_eth_dev_tx_queue_config(), which are > both called from rte_eth_dev_configure() which is called by the application > (for example test_pmd). So it seems to make sense to free this memory in > rte_eth_dev_uninit().
It really make sense to free memory in rte_ether level, but when close a port with out detached? just as stop --> close() --> quit(), the memory will not be released :) Thanks, Michael > > Regards, > > Bernard. > > > > >