From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id BF3C1A0613 for ; Wed, 25 Sep 2019 17:43:28 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 932061BE87; Wed, 25 Sep 2019 17:43:27 +0200 (CEST) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by dpdk.org (Postfix) with ESMTP id 4747E1BE82 for ; Wed, 25 Sep 2019 17:43:25 +0200 (CEST) X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Sep 2019 08:43:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,548,1559545200"; d="scan'208";a="193810212" Received: from yexl-server.sh.intel.com (HELO localhost) ([10.67.117.17]) by orsmga006.jf.intel.com with ESMTP; 25 Sep 2019 08:43:22 -0700 Date: Wed, 25 Sep 2019 23:41:12 +0800 From: Ye Xiaolong To: Di ChenxuX Cc: dev@dpdk.org, qiming.yang@intel.com Message-ID: <20190925154112.GH60476@intel.com> References: <20190827050142.16010-1-chenxux.di@intel.com> <20190919024742.8147-1-chenxux.di@intel.com> <20190919024742.8147-2-chenxux.di@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190919024742.8147-2-chenxux.di@intel.com> User-Agent: Mutt/1.9.4 (2018-02-28) Subject: Re: [dpdk-dev] [PATCH v4 1/5] net/e1000: release port upon close X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On 09/19, Di ChenxuX wrote: >Set RTE_ETH_DEV_CLOSE_REMOVE upon probe so all the private resources > for the port can be freed by rte_eth_dev_close(). > >Signed-off-by: Di ChenxuX >--- > doc/guides/rel_notes/release_19_11.rst | 5 + > drivers/net/e1000/igb_ethdev.c | 144 ++++++++++++------------- As I commented before, you also need to do the migration for the em_ethdev.c. > 2 files changed, 77 insertions(+), 72 deletions(-) > >diff --git a/doc/guides/rel_notes/release_19_11.rst b/doc/guides/rel_notes/release_19_11.rst >index 27cfbd9e3..334756906 100644 >--- a/doc/guides/rel_notes/release_19_11.rst >+++ b/doc/guides/rel_notes/release_19_11.rst >@@ -56,6 +56,11 @@ New Features > Also, make sure to start the actual text at the margin. > ========================================================= > >+* **Updated the Intel drivers.** >+ >+ * Added support for the ``RTE_ETH_DEV_CLOSE_REMOVE`` flag for >+ e1000, fm10k, i40e, ice, ixgbe. >+ I think it makes more scene to separate release notes in respective patches, as this patch just update e1000 pmd. > > Removed Items > ------------- >diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c >index fec2b4289..c610042c3 100644 >--- a/drivers/net/e1000/igb_ethdev.c >+++ b/drivers/net/e1000/igb_ethdev.c >@@ -843,6 +843,11 @@ eth_igb_dev_init(struct rte_eth_dev *eth_dev) > rte_ether_addr_copy((struct rte_ether_addr *)hw->mac.addr, > ð_dev->data->mac_addrs[0]); > [snip] > static int >@@ -1579,14 +1532,13 @@ static void > eth_igb_close(struct rte_eth_dev *dev) > { > struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); >- struct e1000_adapter *adapter = >- E1000_DEV_PRIVATE(dev->data->dev_private); > struct rte_eth_link link; > struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); > struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; >+ struct e1000_filter_info *filter_info = >+ E1000_DEV_PRIVATE_TO_FILTER_INFO(dev->data->dev_private); > > eth_igb_stop(dev); >- adapter->stopped = 1; > > e1000_phy_hw_reset(hw); > igb_release_manageability(hw); >@@ -1610,6 +1562,40 @@ eth_igb_close(struct rte_eth_dev *dev) > > memset(&link, 0, sizeof(link)); > rte_eth_linkstatus_set(dev, &link); >+ >+ dev->dev_ops = NULL; >+ dev->rx_pkt_burst = NULL; >+ dev->tx_pkt_burst = NULL; >+ >+ /* Reset any pending lock */ >+ igb_reset_swfw_lock(hw); >+ >+ /* uninitialize PF if max_vfs not zero */ >+ igb_pf_host_uninit(dev); >+ >+ rte_intr_callback_unregister(intr_handle, >+ eth_igb_interrupt_handler, dev); why rte_intr_disable(intr_handle) is missing here? >+ >+ /* clear the SYN filter info */ >+ filter_info->syn_info = 0; >+ >+ /* clear the ethertype filters info */ >+ filter_info->ethertype_mask = 0; >+ memset(filter_info->ethertype_filters, 0, >+ E1000_MAX_ETQF_FILTERS * sizeof(struct igb_ethertype_filter)); >+ >+ /* clear the rss filter info */ >+ memset(&filter_info->rss_info, 0, >+ sizeof(struct igb_rte_flow_rss_conf)); >+ >+ /* remove all ntuple filters of the device */ >+ igb_ntuple_filter_uninit(dev); >+ >+ /* remove all flex filters of the device */ >+ igb_flex_filter_uninit(dev); >+ >+ /* clear all the filters list */ >+ igb_filterlist_flush(dev); > } > > /* >@@ -3331,6 +3317,11 @@ igbvf_dev_stop(struct rte_eth_dev *dev) > { > struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); > struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; >+ struct e1000_adapter *adapter = >+ E1000_DEV_PRIVATE(dev->data->dev_private); >+ >+ if (adapter->stopped) >+ return; > > PMD_INIT_FUNC_TRACE(); > >@@ -3353,22 +3344,23 @@ igbvf_dev_stop(struct rte_eth_dev *dev) > rte_free(intr_handle->intr_vec); > intr_handle->intr_vec = NULL; > } >+ >+ adapter->stopped = true; > } > > static void > igbvf_dev_close(struct rte_eth_dev *dev) > { > struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); >- struct e1000_adapter *adapter = >- E1000_DEV_PRIVATE(dev->data->dev_private); > struct rte_ether_addr addr; >+ struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); > > PMD_INIT_FUNC_TRACE(); > > e1000_reset_hw(hw); > > igbvf_dev_stop(dev); >- adapter->stopped = 1; >+ > igb_dev_free_queues(dev); > > /** >@@ -3379,6 +3371,14 @@ igbvf_dev_close(struct rte_eth_dev *dev) > > memset(&addr, 0, sizeof(addr)); > igbvf_default_mac_addr_set(dev, &addr); >+ >+ dev->dev_ops = NULL; >+ dev->rx_pkt_burst = NULL; >+ dev->tx_pkt_burst = NULL; >+ >+ rte_intr_callback_unregister(&pci_dev->intr_handle, >+ eth_igbvf_interrupt_handler, >+ (void *)dev); Ditto. Thanks, Xiaolong > } > > static void >-- >2.17.1 >