From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 1D345C376 for ; Mon, 29 Jun 2015 17:22:10 +0200 (CEST) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga102.jf.intel.com with ESMTP; 29 Jun 2015 08:22:11 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,699,1427785200"; d="scan'208";a="736957191" Received: from kmsmsx153.gar.corp.intel.com ([172.21.73.88]) by fmsmga001.fm.intel.com with ESMTP; 29 Jun 2015 08:22:07 -0700 Received: from shsmsx102.ccr.corp.intel.com (10.239.4.154) by KMSMSX153.gar.corp.intel.com (172.21.73.88) with Microsoft SMTP Server (TLS) id 14.3.224.2; Mon, 29 Jun 2015 23:22:06 +0800 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.246]) by shsmsx102.ccr.corp.intel.com ([169.254.2.165]) with mapi id 14.03.0224.002; Mon, 29 Jun 2015 23:22:05 +0800 From: "Qiu, Michael" To: "Iremonger, Bernard" , "dev@dpdk.org" Thread-Topic: [PATCH v2] librte_ether: release memory in uninit function. Thread-Index: AQHQr/MWrMnfGSFKL02MpXHseHw6cg== Date: Mon, 29 Jun 2015 15:22:04 +0000 Message-ID: <533710CFB86FA344BFBF2D6802E60286046A6ED8@SHSMSX101.ccr.corp.intel.com> References: <1435311160-8679-1-git-send-email-bernard.iremonger@intel.com> <533710CFB86FA344BFBF2D6802E60286046A625A@SHSMSX101.ccr.corp.intel.com> <8CEF83825BEC744B83065625E567D7C204A42C88@IRSMSX108.ger.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v2] librte_ether: release memory in uninit function. X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2015 15:22:11 -0000 On 2015/6/29 18:20, Iremonger, Bernard wrote:=0A= >=0A= >> -----Original Message-----=0A= >> From: Qiu, Michael=0A= >> Sent: Monday, June 29, 2015 9:55 AM=0A= >> To: Iremonger, Bernard; dev@dpdk.org=0A= >> Cc: Zhang, Helin; Ananyev, Konstantin; mukawa@igel.co.jp; Stephen=0A= >> Hemminger=0A= >> Subject: Re: [PATCH v2] librte_ether: release memory in uninit function.= =0A= >>=0A= >> On 6/26/2015 5:32 PM, Iremonger, Bernard wrote:=0A= >>> Changes in v2:=0A= >>> do not free mac_addrs and hash_mac_addrs here.=0A= >>>=0A= >>> Signed-off-by: Bernard Iremonger =0A= >>> ---=0A= >>> lib/librte_ether/rte_ethdev.c | 6 +++++-=0A= >>> 1 files changed, 5 insertions(+), 1 deletions(-)=0A= >>>=0A= >>> diff --git a/lib/librte_ether/rte_ethdev.c=0A= >>> b/lib/librte_ether/rte_ethdev.c index e13fde5..7ae101a 100644=0A= >>> --- a/lib/librte_ether/rte_ethdev.c=0A= >>> +++ b/lib/librte_ether/rte_ethdev.c=0A= >>> @@ -369,8 +369,12 @@ rte_eth_dev_uninit(struct rte_pci_device=0A= >> *pci_dev)=0A= >>> /* free ether device */=0A= >>> rte_eth_dev_release_port(eth_dev);=0A= >>>=0A= >>> - if (rte_eal_process_type() =3D=3D RTE_PROC_PRIMARY)=0A= >>> + if (rte_eal_process_type() =3D=3D RTE_PROC_PRIMARY) {=0A= >>> + rte_free(eth_dev->data->rx_queues);=0A= >>> + rte_free(eth_dev->data->tx_queues);=0A= >>> rte_free(eth_dev->data->dev_private);=0A= >>> + memset(eth_dev->data, 0, sizeof(struct=0A= >> rte_eth_dev_data));=0A= >>> + }=0A= >>>=0A= >>> eth_dev->pci_dev =3D NULL;=0A= >>> eth_dev->driver =3D NULL;=0A= >>=0A= >> Actually, This could be put in rte_eth_dev_close() becasue queues should= be=0A= >> released when closed.=0A= >>=0A= >> Also before free dev->data->rx_queues you should make sure=0A= >> dev->data->rx_queues[i] has been freed in PMD close() function, So this= =0A= >> two should be better done at the same time, ether in=0A= >> rte_eth_dev_close() or in PMD close() function. For hotplug in fm10k, I = put it=0A= >> in PMD close() function.=0A= >>=0A= >> Thanks,=0A= >> Michael=0A= > Hi Michael,=0A= > =0A= > The consensus is that the rx_queue and tx_queue memory should not be rele= ased 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 a= re both called from rte_eth_dev_configure() which is called by the applicat= ion (for example test_pmd). So it seems to make sense to free this memory = in rte_eth_dev_uninit().=0A= =0A= It really make sense to free memory in rte_ether level, but when close a=0A= port with out detached? just as stop --> close() --> quit(), the memory=0A= will not be released :)=0A= =0A= Thanks,=0A= Michael=0A= =0A= >=0A= > Regards,=0A= >=0A= > Bernard.=0A= >=0A= >=0A= >=0A= >=0A= >=0A= =0A=