From patchwork Sun Sep 13 22:06:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 77553 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 60356A04C9; Mon, 14 Sep 2020 00:07:38 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9E1C71C012; Mon, 14 Sep 2020 00:07:36 +0200 (CEST) Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) by dpdk.org (Postfix) with ESMTP id 3F9A81C012 for ; Mon, 14 Sep 2020 00:07:34 +0200 (CEST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id CAB8B5D6; Sun, 13 Sep 2020 18:07:32 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 13 Sep 2020 18:07:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=K4Xnm/jBXKF0/ w5Uj//drDEKxU3kbryJqjUUaoWApN8=; b=FczgwP5Vp0JxRe38Qqvu41RHFqG2w Eq9MkhpNfp/tgu9Nsv96+gc9dOM22g5CUcVyPoAolaYAsCrWWVWB1cE2tfwYEGi3 AR/9DAh4YvKCROsoAe19RfqNOdvTw01n8SvqXQV0rTQNBXqp8jql5DKhNvu1fyhF aMshqOKPNUP1WUgjwHM5OwywzKFyopO8Yzwl9EXa55Oe9ThrzSR0dYynWpUyq8oj XuuxhEWgS/fXR5qT6Wi/ViaOot9SoRQusF1bDSlezCDCgCbH1uARuipuTy5eYSEk CAWe8TQ71PklnhbAUjcn0EGIFmfffDivxrO56lBCpmEFcMoBgxpRVjXuQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=K4Xnm/jBXKF0/w5Uj//drDEKxU3kbryJqjUUaoWApN8=; b=SKsqDF4p UL0IvupXdsTVzCW6WFMLn6QN7mCEPH17dMsUuwk55qyzl+wBA3qQ7OPN5leZn95Z ygL4Yg8zw9TObq+Ulcj88YgreBpOGZ0/OPR9JqyLW861Omk0y1nFbQq4Gm2v/Fza KYxDcOdKVzBCodIwdFitVhH5DO7tnSXmPFg+IBdZQsAqXXsebRBMI3fpcVnDQPYu xHMkyXddFmaHRokpukv9afiESO9vQ3nYANz77eBlLwIHB5yQMKE67hsODa/V3JME STyQKoMprc+vh32lbVngPv4kWk4Gi5mEm3nM+3K4AcB7EvmtXgeolWBJFrdXj+DQ Apv+HUioOXQOUA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeihedgtdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepvdehgfeivdejgedtveehfefhteelfefgieevgfffveefjeegtdfg uedthedtgeevnecukfhppeejjedrudefgedrvddtfedrudekgeenucevlhhushhtvghruf hiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehthhhomhgrshesmhhonhhjrghl ohhnrdhnvght X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id BB2673064688; Sun, 13 Sep 2020 18:07:30 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, arybchenko@solarflare.com, Shepard Siegel , Ed Czeck , John Miller , Jerin Jacob , Nithin Dabilpuram , Kiran Kumar K , Martin Spinler Date: Mon, 14 Sep 2020 00:06:52 +0200 Message-Id: <20200913220711.3768597-2-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200913220711.3768597-1-thomas@monjalon.net> References: <20200913220711.3768597-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 01/20] ethdev: reset device and interrupt pointers on release 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" The pointers .device and .intr_handle were already reset by the helper rte_eth_dev_pci_generic_remove(). It is now made part of rte_eth_dev_release_port(). It makes rte_eth_dev_pci_release() meaningless, so it is replaced with a call to rte_eth_dev_release_port(). Signed-off-by: Thomas Monjalon Reviewed-by: Ferruh Yigit --- drivers/net/ark/ark_ethdev.c | 2 +- drivers/net/octeontx2/otx2_ethdev.c | 2 +- drivers/net/szedata2/rte_eth_szedata2.c | 6 +++--- lib/librte_ethdev/rte_ethdev.c | 2 ++ lib/librte_ethdev/rte_ethdev_pci.h | 14 ++------------ 5 files changed, 9 insertions(+), 17 deletions(-) diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c index b32ccd8677..0321ec1264 100644 --- a/drivers/net/ark/ark_ethdev.c +++ b/drivers/net/ark/ark_ethdev.c @@ -105,7 +105,7 @@ eth_ark_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, ret = eth_ark_dev_init(eth_dev); if (ret) - rte_eth_dev_pci_release(eth_dev); + rte_eth_dev_release_port(eth_dev); return ret; } diff --git a/drivers/net/octeontx2/otx2_ethdev.c b/drivers/net/octeontx2/otx2_ethdev.c index 33b72bd4db..7425ee55be 100644 --- a/drivers/net/octeontx2/otx2_ethdev.c +++ b/drivers/net/octeontx2/otx2_ethdev.c @@ -2668,7 +2668,7 @@ nix_remove(struct rte_pci_device *pci_dev) if (rc) return rc; - rte_eth_dev_pci_release(eth_dev); + rte_eth_dev_release_port(eth_dev); } /* Nothing to be done for secondary processes */ diff --git a/drivers/net/szedata2/rte_eth_szedata2.c b/drivers/net/szedata2/rte_eth_szedata2.c index 30c888cd96..a17c53577c 100644 --- a/drivers/net/szedata2/rte_eth_szedata2.c +++ b/drivers/net/szedata2/rte_eth_szedata2.c @@ -1802,7 +1802,7 @@ szedata2_eth_dev_release_interval(struct rte_eth_dev **eth_devs, for (i = from; i < to; i++) { rte_szedata2_eth_dev_uninit(eth_devs[i]); - rte_eth_dev_pci_release(eth_devs[i]); + rte_eth_dev_release_port(eth_devs[i]); } } @@ -1853,7 +1853,7 @@ static int szedata2_eth_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, if (ret != 0) { PMD_INIT_LOG(ERR, "Failed to init eth_dev for port %u", i); - rte_eth_dev_pci_release(eth_devs[i]); + rte_eth_dev_release_port(eth_devs[i]); szedata2_eth_dev_release_interval(eth_devs, 0, i); rte_free(list_entry); return ret; @@ -1922,7 +1922,7 @@ static int szedata2_eth_pci_remove(struct rte_pci_device *pci_dev) retval = retval ? retval : ret; } - rte_eth_dev_pci_release(eth_dev); + rte_eth_dev_release_port(eth_dev); } return retval; diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index 7858ad5f11..3617f39ca0 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -555,6 +555,8 @@ rte_eth_dev_release_port(struct rte_eth_dev *eth_dev) rte_spinlock_lock(&rte_eth_dev_shared_data->ownership_lock); eth_dev->state = RTE_ETH_DEV_UNUSED; + eth_dev->device = NULL; + eth_dev->intr_handle = NULL; if (rte_eal_process_type() == RTE_PROC_PRIMARY) { rte_free(eth_dev->data->rx_queues); diff --git a/lib/librte_ethdev/rte_ethdev_pci.h b/lib/librte_ethdev/rte_ethdev_pci.h index a999602fdd..114da807ff 100644 --- a/lib/librte_ethdev/rte_ethdev_pci.h +++ b/lib/librte_ethdev/rte_ethdev_pci.h @@ -134,16 +134,6 @@ rte_eth_dev_pci_allocate(struct rte_pci_device *dev, size_t private_data_size) return eth_dev; } -static inline void -rte_eth_dev_pci_release(struct rte_eth_dev *eth_dev) -{ - eth_dev->device = NULL; - eth_dev->intr_handle = NULL; - - /* free ether device */ - rte_eth_dev_release_port(eth_dev); -} - typedef int (*eth_dev_pci_callback_t)(struct rte_eth_dev *eth_dev); /** @@ -165,7 +155,7 @@ rte_eth_dev_pci_generic_probe(struct rte_pci_device *pci_dev, RTE_FUNC_PTR_OR_ERR_RET(*dev_init, -EINVAL); ret = dev_init(eth_dev); if (ret) - rte_eth_dev_pci_release(eth_dev); + rte_eth_dev_release_port(eth_dev); else rte_eth_dev_probing_finish(eth_dev); @@ -194,7 +184,7 @@ rte_eth_dev_pci_generic_remove(struct rte_pci_device *pci_dev, return ret; } - rte_eth_dev_pci_release(eth_dev); + rte_eth_dev_release_port(eth_dev); return 0; } From patchwork Sun Sep 13 22:06:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 77571 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id A308BA04C9; Mon, 14 Sep 2020 00:10:25 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A4FB51C0D2; Mon, 14 Sep 2020 00:10:20 +0200 (CEST) Received: from new4-smtp.messagingengine.com (new4-smtp.messagingengine.com [66.111.4.230]) by dpdk.org (Postfix) with ESMTP id 307F22C52 for ; Mon, 14 Sep 2020 00:10:17 +0200 (CEST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailnew.nyi.internal (Postfix) with ESMTP id 89DD6580098; Sun, 13 Sep 2020 18:07:44 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 13 Sep 2020 18:07:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=MwyZYbCdZPJsw U0O5uoprU2kDhkkThWu0J8FfBxD7BI=; b=Lk6KE5tnsCZtmFY4OQKOazL6clKP/ lo3d8QksZ8h2O45Zedu1sQA7l30s7jr+tMZ99J4IUfxQZjoj8dE6QUZ3p7Vv1kGd OrE1SqQny/R4Ppt9R2vcBbMY23Ny4rtnfQQywcwossWFBPqw0cd1Q4KAYmoEj63L sKn9mDZLqLFVYSMU+7erbBNJw9dj+D3Hk8nR74RHCB/ajSD11J+YACFug0/q448e Ys/Xt969LdS6bsXbEDmM3U8kWmUDpzkHl/4O9B/lAK/uzAUQr7vFrU2t6mci7DmX hpQ3StZOoF/i0pW4YHbETDVl65ffQmap/Rh9JRzwXsh+dNLpeHBxSTs/w== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=MwyZYbCdZPJswU0O5uoprU2kDhkkThWu0J8FfBxD7BI=; b=pdwKsua0 PXe8wpxg+b14LpPOLm/mmi6qi+g5JvMlUjcFKnn/e3WwMmxe32OonNMw7I/URbGW B8Zgjd0mOxYba7a5QB7ekewfdxYCK8CBiuR5BKwkQ7s6Mw5a6Ly7Jo3JFoO75XqZ IVsVk7sATR/re1KoTkYUVovkx4U/2XlBSusqLwPcPrEP3H+FvKKN06ZI58PPIByA IqNXcimHY5ZfiJXiPScaoE6A1PaWr8z1nBMQR6yLGhs7wUPNVJVB7lNiwkLRCC0t +b/KeJ3QXZL1049D4SVMYjC0j94bXbLz7DMCf8sfTlu8/AuwJwFuI8L2HFXXWm0E gK7caH61M6EIlQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeihedgtdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepvdehgfeivdejgedtveehfefhteelfefgieevgfffveefjeegtdfg uedthedtgeevnecukfhppeejjedrudefgedrvddtfedrudekgeenucevlhhushhtvghruf hiiigvpedunecurfgrrhgrmhepmhgrihhlfhhrohhmpehthhhomhgrshesmhhonhhjrghl ohhnrdhnvght X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id 56E6A3064674; Sun, 13 Sep 2020 18:07:36 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, arybchenko@solarflare.com, "John W. Linville" , Ciara Loftus , Qi Zhang , Shepard Siegel , Ed Czeck , John Miller , Igor Russkikh , Pavel Belous , Steven Webster , Matt Peters , Somalapuram Amaranath , Rasesh Mody , Shahed Shaikh , Ajit Khaparde , Somnath Kotur , Chas Williams , "Wei Hu (Xavier)" , Rahul Lakkireddy , Hemant Agrawal , Sachin Saxena , Wei Zhao , Jeff Guo , Marcin Wojtas , Michal Krawczyk , Guy Tzalik , Evgeny Schemeilin , Igor Chauskin , Gagandeep Singh , John Daley , Hyong Youb Kim , Gaetan Rivet , Xiao Wang , Ziyang Xuan , Xiaoyun Wang , Guoyang Zhou , "Min Hu (Connor)" , Yisen Zhuang , Beilei Xing , Jingjing Wu , Qiming Yang , Alfredo Cardigliano , Rosen Xu , Shijith Thotton , Srisivasubramanian Srinivasan , Jakub Grajciar , Matan Azrad , Shahaf Shuler , Viacheslav Ovsiienko , Zyta Szpak , Liron Himi , Stephen Hemminger , "K. Y. Srinivasan" , Haiyang Zhang , Long Li , Martin Spinler , Heinrich Kuhn , Harman Kalra , Jerin Jacob , Nithin Dabilpuram , Kiran Kumar K , Akhil Goyal , Jasvinder Singh , Cristian Dumitrescu , Keith Wiles , Maciej Czekaj , Maxime Coquelin , Chenbo Xia , Zhihong Wang , Yong Wang Date: Mon, 14 Sep 2020 00:06:53 +0200 Message-Id: <20200913220711.3768597-3-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200913220711.3768597-1-thomas@monjalon.net> References: <20200913220711.3768597-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 02/20] ethdev: allow drivers to return error on 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" The device operation .dev_close was returning void. This driver interface is changed to return an int. Note that the API rte_eth_dev_close() is still returning void, although a deprecation notice is pending to change it as well. Signed-off-by: Thomas Monjalon --- app/test/virtual_pmd.c | 6 ++++-- drivers/net/af_packet/rte_eth_af_packet.c | 3 ++- drivers/net/af_xdp/rte_eth_af_xdp.c | 4 +++- drivers/net/ark/ark_ethdev.c | 6 ++++-- drivers/net/atlantic/atl_ethdev.c | 6 ++++-- drivers/net/avp/avp_ethdev.c | 5 +++-- drivers/net/axgbe/axgbe_ethdev.c | 5 +++-- drivers/net/bnx2x/bnx2x_ethdev.c | 4 +++- drivers/net/bnxt/bnxt_ethdev.c | 4 +++- drivers/net/bnxt/bnxt_reps.c | 3 ++- drivers/net/bnxt/bnxt_reps.h | 2 +- drivers/net/bonding/eth_bond_private.h | 2 +- drivers/net/bonding/rte_eth_bond_pmd.c | 4 +++- drivers/net/cxgbe/cxgbe_ethdev.c | 6 ++++-- drivers/net/cxgbe/cxgbe_pfvf.h | 2 +- drivers/net/dpaa/dpaa_ethdev.c | 4 +++- drivers/net/dpaa2/dpaa2_ethdev.c | 6 ++++-- drivers/net/e1000/em_ethdev.c | 6 ++++-- drivers/net/e1000/igb_ethdev.c | 12 ++++++++---- drivers/net/ena/ena_ethdev.c | 6 ++++-- drivers/net/enetc/enetc_ethdev.c | 4 +++- drivers/net/enic/enic_ethdev.c | 4 +++- drivers/net/failsafe/failsafe_ops.c | 3 ++- drivers/net/fm10k/fm10k_ethdev.c | 4 +++- drivers/net/hinic/hinic_pmd_ethdev.c | 6 ++++-- drivers/net/hns3/hns3_ethdev.c | 6 ++++-- drivers/net/hns3/hns3_ethdev_vf.c | 6 ++++-- drivers/net/i40e/i40e_ethdev.c | 5 +++-- drivers/net/i40e/i40e_ethdev_vf.c | 5 +++-- drivers/net/iavf/iavf_ethdev.c | 5 +++-- drivers/net/ice/ice_dcf_ethdev.c | 6 ++++-- drivers/net/ice/ice_ethdev.c | 6 ++++-- drivers/net/igc/igc_ethdev.c | 6 ++++-- drivers/net/ionic/ionic_ethdev.c | 10 ++++++---- drivers/net/ipn3ke/ipn3ke_representor.c | 4 +++- drivers/net/ixgbe/ixgbe_ethdev.c | 11 +++++++---- drivers/net/kni/rte_eth_kni.c | 4 +++- drivers/net/liquidio/lio_ethdev.c | 4 +++- drivers/net/memif/rte_eth_memif.c | 4 +++- drivers/net/mlx4/mlx4.c | 3 ++- drivers/net/mlx5/mlx5.c | 9 +++++---- drivers/net/mlx5/mlx5.h | 2 +- drivers/net/mvneta/mvneta_ethdev.c | 4 +++- drivers/net/mvpp2/mrvl_ethdev.c | 4 +++- drivers/net/netvsc/hn_ethdev.c | 4 +++- drivers/net/nfb/nfb_ethdev.c | 4 +++- drivers/net/nfp/nfp_net.c | 6 ++++-- drivers/net/octeontx/octeontx_ethdev.c | 4 +++- drivers/net/octeontx2/otx2_ethdev.c | 5 +++-- drivers/net/pcap/rte_eth_pcap.c | 3 ++- drivers/net/pfe/pfe_ethdev.c | 8 +++++--- drivers/net/qede/qede_ethdev.c | 4 +++- drivers/net/sfc/sfc_ethdev.c | 4 +++- drivers/net/softnic/rte_eth_softnic.c | 4 ++-- drivers/net/szedata2/rte_eth_szedata2.c | 4 +++- drivers/net/tap/rte_eth_tap.c | 4 +++- drivers/net/thunderx/nicvf_ethdev.c | 4 +++- drivers/net/vhost/rte_eth_vhost.c | 6 ++++-- drivers/net/virtio/virtio_ethdev.c | 6 ++++-- drivers/net/vmxnet3/vmxnet3_ethdev.c | 6 ++++-- lib/librte_ethdev/rte_ethdev_core.h | 2 +- 61 files changed, 200 insertions(+), 99 deletions(-) diff --git a/app/test/virtual_pmd.c b/app/test/virtual_pmd.c index 79156cb85a..596b608f4c 100644 --- a/app/test/virtual_pmd.c +++ b/app/test/virtual_pmd.c @@ -62,9 +62,11 @@ static void virtual_ethdev_stop(struct rte_eth_dev *eth_dev __rte_unused) rte_pktmbuf_free(pkt); } -static void +static int virtual_ethdev_close(struct rte_eth_dev *dev __rte_unused) -{} +{ + return 0; +} static int virtual_ethdev_configure_success(struct rte_eth_dev *dev __rte_unused) diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c index b9723e9619..7d0ff1cbb3 100644 --- a/drivers/net/af_packet/rte_eth_af_packet.c +++ b/drivers/net/af_packet/rte_eth_af_packet.c @@ -376,9 +376,10 @@ eth_stats_reset(struct rte_eth_dev *dev) return 0; } -static void +static int eth_dev_close(struct rte_eth_dev *dev __rte_unused) { + return 0; } static void diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c b/drivers/net/af_xdp/rte_eth_af_xdp.c index 936d4a7d5f..bac9729bf8 100644 --- a/drivers/net/af_xdp/rte_eth_af_xdp.c +++ b/drivers/net/af_xdp/rte_eth_af_xdp.c @@ -701,7 +701,7 @@ xdp_umem_destroy(struct xsk_umem_info *umem) umem = NULL; } -static void +static int eth_dev_close(struct rte_eth_dev *dev) { struct pmd_internals *internals = dev->data->dev_private; @@ -731,6 +731,8 @@ eth_dev_close(struct rte_eth_dev *dev) dev->data->mac_addrs = NULL; remove_xdp_program(internals); + + return 0; } static void diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c index 0321ec1264..9e1f8218a8 100644 --- a/drivers/net/ark/ark_ethdev.c +++ b/drivers/net/ark/ark_ethdev.c @@ -30,7 +30,7 @@ static int eth_ark_dev_uninit(struct rte_eth_dev *eth_dev); static int eth_ark_dev_configure(struct rte_eth_dev *dev); static int eth_ark_dev_start(struct rte_eth_dev *dev); static void eth_ark_dev_stop(struct rte_eth_dev *dev); -static void eth_ark_dev_close(struct rte_eth_dev *dev); +static int eth_ark_dev_close(struct rte_eth_dev *dev); static int eth_ark_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info); static int eth_ark_dev_link_update(struct rte_eth_dev *dev, @@ -681,7 +681,7 @@ eth_ark_dev_stop(struct rte_eth_dev *dev) } } -static void +static int eth_ark_dev_close(struct rte_eth_dev *dev) { struct ark_adapter *ark = dev->data->dev_private; @@ -711,6 +711,8 @@ eth_ark_dev_close(struct rte_eth_dev *dev) rte_free(dev->data->mac_addrs); dev->data->mac_addrs = 0; + + return 0; } static int diff --git a/drivers/net/atlantic/atl_ethdev.c b/drivers/net/atlantic/atl_ethdev.c index d3b00ab295..1d76883c52 100644 --- a/drivers/net/atlantic/atl_ethdev.c +++ b/drivers/net/atlantic/atl_ethdev.c @@ -22,7 +22,7 @@ static int atl_dev_start(struct rte_eth_dev *dev); static void atl_dev_stop(struct rte_eth_dev *dev); static int atl_dev_set_link_up(struct rte_eth_dev *dev); static int atl_dev_set_link_down(struct rte_eth_dev *dev); -static void atl_dev_close(struct rte_eth_dev *dev); +static int atl_dev_close(struct rte_eth_dev *dev); static int atl_dev_reset(struct rte_eth_dev *dev); static int atl_dev_promiscuous_enable(struct rte_eth_dev *dev); static int atl_dev_promiscuous_disable(struct rte_eth_dev *dev); @@ -718,7 +718,7 @@ atl_dev_set_link_down(struct rte_eth_dev *dev) /* * Reset and stop device. */ -static void +static int atl_dev_close(struct rte_eth_dev *dev) { PMD_INIT_FUNC_TRACE(); @@ -726,6 +726,8 @@ atl_dev_close(struct rte_eth_dev *dev) atl_dev_stop(dev); atl_free_queues(dev); + + return 0; } static int diff --git a/drivers/net/avp/avp_ethdev.c b/drivers/net/avp/avp_ethdev.c index 5b47f0924a..2eed6acc3f 100644 --- a/drivers/net/avp/avp_ethdev.c +++ b/drivers/net/avp/avp_ethdev.c @@ -38,7 +38,7 @@ static int avp_dev_create(struct rte_pci_device *pci_dev, static int avp_dev_configure(struct rte_eth_dev *dev); static int avp_dev_start(struct rte_eth_dev *dev); static void avp_dev_stop(struct rte_eth_dev *dev); -static void avp_dev_close(struct rte_eth_dev *dev); +static int avp_dev_close(struct rte_eth_dev *dev); static int avp_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info); static int avp_vlan_offload_set(struct rte_eth_dev *dev, int mask); @@ -2103,7 +2103,7 @@ avp_dev_stop(struct rte_eth_dev *eth_dev) rte_spinlock_unlock(&avp->lock); } -static void +static int avp_dev_close(struct rte_eth_dev *eth_dev) { struct avp_dev *avp = AVP_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private); @@ -2139,6 +2139,7 @@ avp_dev_close(struct rte_eth_dev *eth_dev) unlock: rte_spinlock_unlock(&avp->lock); + return 0; } static int diff --git a/drivers/net/axgbe/axgbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c index 0c25739f82..be6f7cbda6 100644 --- a/drivers/net/axgbe/axgbe_ethdev.c +++ b/drivers/net/axgbe/axgbe_ethdev.c @@ -15,7 +15,7 @@ static int axgbe_dev_configure(struct rte_eth_dev *dev); static int axgbe_dev_start(struct rte_eth_dev *dev); static void axgbe_dev_stop(struct rte_eth_dev *dev); static void axgbe_dev_interrupt_handler(void *param); -static void axgbe_dev_close(struct rte_eth_dev *dev); +static int axgbe_dev_close(struct rte_eth_dev *dev); static int axgbe_dev_promiscuous_enable(struct rte_eth_dev *dev); static int axgbe_dev_promiscuous_disable(struct rte_eth_dev *dev); static int axgbe_dev_allmulticast_enable(struct rte_eth_dev *dev); @@ -379,10 +379,11 @@ axgbe_dev_stop(struct rte_eth_dev *dev) } /* Clear all resources like TX/RX queues. */ -static void +static int axgbe_dev_close(struct rte_eth_dev *dev) { axgbe_dev_clear_queues(dev); + return 0; } static int diff --git a/drivers/net/bnx2x/bnx2x_ethdev.c b/drivers/net/bnx2x/bnx2x_ethdev.c index b2ea5fafa7..73217c2138 100644 --- a/drivers/net/bnx2x/bnx2x_ethdev.c +++ b/drivers/net/bnx2x/bnx2x_ethdev.c @@ -280,7 +280,7 @@ bnx2x_dev_stop(struct rte_eth_dev *dev) return; } -static void +static int bnx2x_dev_close(struct rte_eth_dev *dev) { struct bnx2x_softc *sc = dev->data->dev_private; @@ -295,6 +295,8 @@ bnx2x_dev_close(struct rte_eth_dev *dev) /* free ilt */ bnx2x_free_ilt_mem(sc); + + return 0; } static int diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c index 510a0d9e0a..02e53bf04d 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -1329,7 +1329,7 @@ static void bnxt_dev_stop_op(struct rte_eth_dev *eth_dev) bp->flow_stat->flow_count = 0; } -static void bnxt_dev_close_op(struct rte_eth_dev *eth_dev) +static int bnxt_dev_close_op(struct rte_eth_dev *eth_dev) { struct bnxt *bp = eth_dev->data->dev_private; @@ -1365,6 +1365,8 @@ static void bnxt_dev_close_op(struct rte_eth_dev *eth_dev) rte_free(bp->grp_info); bp->grp_info = NULL; + + return 0; } static void bnxt_mac_addr_remove_op(struct rte_eth_dev *eth_dev, diff --git a/drivers/net/bnxt/bnxt_reps.c b/drivers/net/bnxt/bnxt_reps.c index 6fa9a30d27..fa014125e3 100644 --- a/drivers/net/bnxt/bnxt_reps.c +++ b/drivers/net/bnxt/bnxt_reps.c @@ -449,9 +449,10 @@ void bnxt_vf_rep_dev_stop_op(struct rte_eth_dev *eth_dev) bnxt_vf_rep_free_rx_mbufs(vfr_bp); } -void bnxt_vf_rep_dev_close_op(struct rte_eth_dev *eth_dev) +int bnxt_vf_rep_dev_close_op(struct rte_eth_dev *eth_dev) { bnxt_vf_representor_uninit(eth_dev); + return 0; } int bnxt_vf_rep_dev_info_get_op(struct rte_eth_dev *eth_dev, diff --git a/drivers/net/bnxt/bnxt_reps.h b/drivers/net/bnxt/bnxt_reps.h index 418b95afcd..0a0501f888 100644 --- a/drivers/net/bnxt/bnxt_reps.h +++ b/drivers/net/bnxt/bnxt_reps.h @@ -38,7 +38,7 @@ int bnxt_vf_rep_tx_queue_setup_op(struct rte_eth_dev *eth_dev, void bnxt_vf_rep_rx_queue_release_op(void *rx_queue); void bnxt_vf_rep_tx_queue_release_op(void *tx_queue); void bnxt_vf_rep_dev_stop_op(struct rte_eth_dev *eth_dev); -void bnxt_vf_rep_dev_close_op(struct rte_eth_dev *eth_dev); +int bnxt_vf_rep_dev_close_op(struct rte_eth_dev *eth_dev); int bnxt_vf_rep_stats_get_op(struct rte_eth_dev *eth_dev, struct rte_eth_stats *stats); int bnxt_vf_rep_stats_reset_op(struct rte_eth_dev *eth_dev); diff --git a/drivers/net/bonding/eth_bond_private.h b/drivers/net/bonding/eth_bond_private.h index c9b2d0fe46..0a0034705d 100644 --- a/drivers/net/bonding/eth_bond_private.h +++ b/drivers/net/bonding/eth_bond_private.h @@ -318,7 +318,7 @@ bond_tlb_activate_slave(struct bond_dev_private *internals); void bond_ethdev_stop(struct rte_eth_dev *eth_dev); -void +int bond_ethdev_close(struct rte_eth_dev *dev); #endif diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index cdbd8151ed..e1123deb83 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -2095,7 +2095,7 @@ bond_ethdev_stop(struct rte_eth_dev *eth_dev) } } -void +int bond_ethdev_close(struct rte_eth_dev *dev) { struct bond_dev_private *internals = dev->data->dev_private; @@ -2119,6 +2119,8 @@ bond_ethdev_close(struct rte_eth_dev *dev) bond_flow_ops.flush(dev, &ferror); bond_ethdev_free_queues(dev); rte_bitmap_reset(internals->vlan_filter_bmp); + + return 0; } /* forward declaration */ diff --git a/drivers/net/cxgbe/cxgbe_ethdev.c b/drivers/net/cxgbe/cxgbe_ethdev.c index 7c6016d5cf..d575a9b389 100644 --- a/drivers/net/cxgbe/cxgbe_ethdev.c +++ b/drivers/net/cxgbe/cxgbe_ethdev.c @@ -315,7 +315,7 @@ int cxgbe_dev_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu) /* * Stop device. */ -void cxgbe_dev_close(struct rte_eth_dev *eth_dev) +int cxgbe_dev_close(struct rte_eth_dev *eth_dev) { struct port_info *pi = eth_dev->data->dev_private; struct adapter *adapter = pi->adapter; @@ -323,7 +323,7 @@ void cxgbe_dev_close(struct rte_eth_dev *eth_dev) CXGBE_FUNC_TRACE(); if (!(adapter->flags & FULL_INIT_DONE)) - return; + return 0; cxgbe_down(pi); @@ -332,6 +332,8 @@ void cxgbe_dev_close(struct rte_eth_dev *eth_dev) * have been disabled */ t4_sge_eth_clear_queues(pi); + + return 0; } /* Start the device. diff --git a/drivers/net/cxgbe/cxgbe_pfvf.h b/drivers/net/cxgbe/cxgbe_pfvf.h index 0b7c52aecf..69d91639e9 100644 --- a/drivers/net/cxgbe/cxgbe_pfvf.h +++ b/drivers/net/cxgbe/cxgbe_pfvf.h @@ -19,7 +19,7 @@ void cxgbe_dev_rx_queue_release(void *q); void cxgbe_dev_tx_queue_release(void *q); void cxgbe_dev_stop(struct rte_eth_dev *eth_dev); -void cxgbe_dev_close(struct rte_eth_dev *eth_dev); +int cxgbe_dev_close(struct rte_eth_dev *eth_dev); int cxgbe_dev_info_get(struct rte_eth_dev *eth_dev, struct rte_eth_dev_info *device_info); int cxgbe_dev_promiscuous_enable(struct rte_eth_dev *eth_dev); diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c index c15e2b5462..da8d36b06f 100644 --- a/drivers/net/dpaa/dpaa_ethdev.c +++ b/drivers/net/dpaa/dpaa_ethdev.c @@ -353,7 +353,7 @@ static void dpaa_eth_dev_stop(struct rte_eth_dev *dev) dev->tx_pkt_burst = dpaa_eth_tx_drop_all; } -static void dpaa_eth_dev_close(struct rte_eth_dev *dev) +static int dpaa_eth_dev_close(struct rte_eth_dev *dev) { struct fman_if *fif = dev->process_private; struct __fman_if *__fif; @@ -376,6 +376,8 @@ static void dpaa_eth_dev_close(struct rte_eth_dev *dev) dpaa_interrupt_handler, (void *)dev); } + + return 0; } static int diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c index 02c254846c..037ee0d2c6 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -1239,7 +1239,7 @@ dpaa2_dev_stop(struct rte_eth_dev *dev) rte_eth_linkstatus_set(dev, &link); } -static void +static int dpaa2_dev_close(struct rte_eth_dev *dev) { struct dpaa2_dev_priv *priv = dev->data->dev_private; @@ -1255,11 +1255,13 @@ dpaa2_dev_close(struct rte_eth_dev *dev) ret = dpni_reset(dpni, CMD_PRI_LOW, priv->token); if (ret) { DPAA2_PMD_ERR("Failure cleaning dpni device: err=%d", ret); - return; + return -1; } memset(&link, 0, sizeof(link)); rte_eth_linkstatus_set(dev, &link); + + return 0; } static int diff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c index 902b1cdca0..45d3949ff7 100644 --- a/drivers/net/e1000/em_ethdev.c +++ b/drivers/net/e1000/em_ethdev.c @@ -34,7 +34,7 @@ static int eth_em_configure(struct rte_eth_dev *dev); static int eth_em_start(struct rte_eth_dev *dev); static void eth_em_stop(struct rte_eth_dev *dev); -static void eth_em_close(struct rte_eth_dev *dev); +static int eth_em_close(struct rte_eth_dev *dev); static int eth_em_promiscuous_enable(struct rte_eth_dev *dev); static int eth_em_promiscuous_disable(struct rte_eth_dev *dev); static int eth_em_allmulticast_enable(struct rte_eth_dev *dev); @@ -758,7 +758,7 @@ eth_em_stop(struct rte_eth_dev *dev) } } -static void +static int eth_em_close(struct rte_eth_dev *dev) { struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -782,6 +782,8 @@ eth_em_close(struct rte_eth_dev *dev) rte_intr_disable(intr_handle); rte_intr_callback_unregister(intr_handle, eth_em_interrupt_handler, dev); + + return 0; } static int diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c index a5551e8175..564216b0a4 100644 --- a/drivers/net/e1000/igb_ethdev.c +++ b/drivers/net/e1000/igb_ethdev.c @@ -77,7 +77,7 @@ static int eth_igb_start(struct rte_eth_dev *dev); static void eth_igb_stop(struct rte_eth_dev *dev); static int eth_igb_dev_set_link_up(struct rte_eth_dev *dev); static int eth_igb_dev_set_link_down(struct rte_eth_dev *dev); -static void eth_igb_close(struct rte_eth_dev *dev); +static int eth_igb_close(struct rte_eth_dev *dev); static int eth_igb_reset(struct rte_eth_dev *dev); static int eth_igb_promiscuous_enable(struct rte_eth_dev *dev); static int eth_igb_promiscuous_disable(struct rte_eth_dev *dev); @@ -155,7 +155,7 @@ static void igbvf_intr_disable(struct e1000_hw *hw); static int igbvf_dev_configure(struct rte_eth_dev *dev); static int igbvf_dev_start(struct rte_eth_dev *dev); static void igbvf_dev_stop(struct rte_eth_dev *dev); -static void igbvf_dev_close(struct rte_eth_dev *dev); +static int igbvf_dev_close(struct rte_eth_dev *dev); static int igbvf_promiscuous_enable(struct rte_eth_dev *dev); static int igbvf_promiscuous_disable(struct rte_eth_dev *dev); static int igbvf_allmulticast_enable(struct rte_eth_dev *dev); @@ -1535,7 +1535,7 @@ eth_igb_dev_set_link_down(struct rte_eth_dev *dev) return 0; } -static void +static int eth_igb_close(struct rte_eth_dev *dev) { struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -1604,6 +1604,8 @@ eth_igb_close(struct rte_eth_dev *dev) /* clear all the filters list */ igb_filterlist_flush(dev); + + return 0; } /* @@ -3382,7 +3384,7 @@ igbvf_dev_stop(struct rte_eth_dev *dev) adapter->stopped = true; } -static void +static int igbvf_dev_close(struct rte_eth_dev *dev) { struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -3413,6 +3415,8 @@ igbvf_dev_close(struct rte_eth_dev *dev) rte_intr_callback_unregister(&pci_dev->intr_handle, eth_igbvf_interrupt_handler, (void *)dev); + + return 0; } static int diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index da8c8ad922..ea979fddd1 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -187,7 +187,7 @@ static void ena_init_rings(struct ena_adapter *adapter, static int ena_mtu_set(struct rte_eth_dev *dev, uint16_t mtu); static int ena_start(struct rte_eth_dev *dev); static void ena_stop(struct rte_eth_dev *dev); -static void ena_close(struct rte_eth_dev *dev); +static int ena_close(struct rte_eth_dev *dev); static int ena_dev_reset(struct rte_eth_dev *dev); static int ena_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats); static void ena_rx_queue_release_all(struct rte_eth_dev *dev); @@ -487,7 +487,7 @@ static void ena_config_debug_area(struct ena_adapter *adapter) ena_com_delete_debug_area(&adapter->ena_dev); } -static void ena_close(struct rte_eth_dev *dev) +static int ena_close(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; @@ -513,6 +513,8 @@ static void ena_close(struct rte_eth_dev *dev) * release of the resource in the rte_eth_dev_release_port(). */ dev->data->mac_addrs = NULL; + + return 0; } static int diff --git a/drivers/net/enetc/enetc_ethdev.c b/drivers/net/enetc/enetc_ethdev.c index c6fb42740d..bdb32762ce 100644 --- a/drivers/net/enetc/enetc_ethdev.c +++ b/drivers/net/enetc/enetc_ethdev.c @@ -545,7 +545,7 @@ enetc_stats_reset(struct rte_eth_dev *dev) return 0; } -static void +static int enetc_dev_close(struct rte_eth_dev *dev) { uint16_t i; @@ -564,6 +564,8 @@ enetc_dev_close(struct rte_eth_dev *dev) dev->data->tx_queues[i] = NULL; } dev->data->nb_tx_queues = 0; + + return 0; } static int diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c index ca75919ee2..b14ed00085 100644 --- a/drivers/net/enic/enic_ethdev.c +++ b/drivers/net/enic/enic_ethdev.c @@ -445,12 +445,14 @@ static void enicpmd_dev_stop(struct rte_eth_dev *eth_dev) /* * Stop device. */ -static void enicpmd_dev_close(struct rte_eth_dev *eth_dev) +static int enicpmd_dev_close(struct rte_eth_dev *eth_dev) { struct enic *enic = pmd_priv(eth_dev); ENICPMD_FUNC_TRACE(); enic_remove(enic); + + return 0; } static int enicpmd_dev_link_update(struct rte_eth_dev *eth_dev, diff --git a/drivers/net/failsafe/failsafe_ops.c b/drivers/net/failsafe/failsafe_ops.c index 96f7e456f9..93ebd09114 100644 --- a/drivers/net/failsafe/failsafe_ops.c +++ b/drivers/net/failsafe/failsafe_ops.c @@ -240,7 +240,7 @@ fs_dev_set_link_down(struct rte_eth_dev *dev) } static void fs_dev_free_queues(struct rte_eth_dev *dev); -static void +static int fs_dev_close(struct rte_eth_dev *dev) { struct sub_device *sdev; @@ -259,6 +259,7 @@ fs_dev_close(struct rte_eth_dev *dev) } fs_dev_free_queues(dev); fs_unlock(dev, 0); + return 0; } static int diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c index b574693bca..82f46cebf5 100644 --- a/drivers/net/fm10k/fm10k_ethdev.c +++ b/drivers/net/fm10k/fm10k_ethdev.c @@ -2779,7 +2779,7 @@ fm10k_close_mbx_service(struct fm10k_hw *hw) hw->mbx.ops.disconnect(hw, &hw->mbx); } -static void +static int fm10k_dev_close(struct rte_eth_dev *dev) { struct fm10k_hw *hw = FM10K_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -2824,6 +2824,8 @@ fm10k_dev_close(struct rte_eth_dev *dev) rte_intr_callback_unregister(intr_handle, fm10k_dev_interrupt_handler_vf, (void *)dev); } + + return 0; } static const struct eth_dev_ops fm10k_eth_dev_ops = { diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c b/drivers/net/hinic/hinic_pmd_ethdev.c index 67e6afcf7a..5f2e97d3bd 100644 --- a/drivers/net/hinic/hinic_pmd_ethdev.c +++ b/drivers/net/hinic/hinic_pmd_ethdev.c @@ -2936,7 +2936,7 @@ static void hinic_nic_dev_destroy(struct rte_eth_dev *eth_dev) * @param dev * Pointer to Ethernet device structure. */ -static void hinic_dev_close(struct rte_eth_dev *dev) +static int hinic_dev_close(struct rte_eth_dev *dev) { struct hinic_nic_dev *nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(dev); @@ -2944,7 +2944,7 @@ static void hinic_dev_close(struct rte_eth_dev *dev) &nic_dev->dev_status)) { PMD_DRV_LOG(WARNING, "Device %s already closed", dev->data->name); - return; + return 0; } /* stop device first */ @@ -2971,6 +2971,8 @@ static void hinic_dev_close(struct rte_eth_dev *dev) /* deinit nic hardware device */ hinic_nic_dev_destroy(dev); + + return 0; } static const struct eth_dev_ops hinic_pmd_ops = { diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c index 81e773046e..96806afd87 100644 --- a/drivers/net/hns3/hns3_ethdev.c +++ b/drivers/net/hns3/hns3_ethdev.c @@ -4747,7 +4747,7 @@ hns3_dev_stop(struct rte_eth_dev *dev) rte_spinlock_unlock(&hw->lock); } -static void +static int hns3_dev_close(struct rte_eth_dev *eth_dev) { struct hns3_adapter *hns = eth_dev->data->dev_private; @@ -4756,7 +4756,7 @@ hns3_dev_close(struct rte_eth_dev *eth_dev) if (rte_eal_process_type() != RTE_PROC_PRIMARY) { rte_free(eth_dev->process_private); eth_dev->process_private = NULL; - return; + return 0; } if (hw->adapter_state == HNS3_NIC_STARTED) @@ -4776,6 +4776,8 @@ hns3_dev_close(struct rte_eth_dev *eth_dev) eth_dev->process_private = NULL; hns3_mp_uninit_primary(); hns3_warn(hw, "Close port %d finished", hw->data->port_id); + + return 0; } static int diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c index 1d2941f0e3..b732bbc732 100644 --- a/drivers/net/hns3/hns3_ethdev_vf.c +++ b/drivers/net/hns3/hns3_ethdev_vf.c @@ -1821,14 +1821,14 @@ hns3vf_dev_stop(struct rte_eth_dev *dev) rte_spinlock_unlock(&hw->lock); } -static void +static int hns3vf_dev_close(struct rte_eth_dev *eth_dev) { struct hns3_adapter *hns = eth_dev->data->dev_private; struct hns3_hw *hw = &hns->hw; if (rte_eal_process_type() != RTE_PROC_PRIMARY) - return; + return 0; if (hw->adapter_state == HNS3_NIC_STARTED) hns3vf_dev_stop(eth_dev); @@ -1846,6 +1846,8 @@ hns3vf_dev_close(struct rte_eth_dev *eth_dev) eth_dev->process_private = NULL; hns3_mp_uninit_primary(); hns3_warn(hw, "Close port %d finished", hw->data->port_id); + + return 0; } static int diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index 11c02b1888..8dccb513d4 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -225,7 +225,7 @@ static int eth_i40e_dev_uninit(struct rte_eth_dev *eth_dev); static int i40e_dev_configure(struct rte_eth_dev *dev); static int i40e_dev_start(struct rte_eth_dev *dev); static void i40e_dev_stop(struct rte_eth_dev *dev); -static void i40e_dev_close(struct rte_eth_dev *dev); +static int i40e_dev_close(struct rte_eth_dev *dev); static int i40e_dev_reset(struct rte_eth_dev *dev); static int i40e_dev_promiscuous_enable(struct rte_eth_dev *dev); static int i40e_dev_promiscuous_disable(struct rte_eth_dev *dev); @@ -2608,7 +2608,7 @@ i40e_dev_stop(struct rte_eth_dev *dev) pf->adapter->rss_reta_updated = 0; } -static void +static int i40e_dev_close(struct rte_eth_dev *dev) { struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private); @@ -2748,6 +2748,7 @@ i40e_dev_close(struct rte_eth_dev *dev) i40e_tm_conf_uninit(dev); hw->adapter_closed = 1; + return 0; } /* diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c index 69cab8e739..104eef639d 100644 --- a/drivers/net/i40e/i40e_ethdev_vf.c +++ b/drivers/net/i40e/i40e_ethdev_vf.c @@ -90,7 +90,7 @@ static int i40evf_dev_xstats_reset(struct rte_eth_dev *dev); static int i40evf_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on); static int i40evf_vlan_offload_set(struct rte_eth_dev *dev, int mask); -static void i40evf_dev_close(struct rte_eth_dev *dev); +static int i40evf_dev_close(struct rte_eth_dev *dev); static int i40evf_dev_reset(struct rte_eth_dev *dev); static int i40evf_check_vf_reset_done(struct rte_eth_dev *dev); static int i40evf_dev_promiscuous_enable(struct rte_eth_dev *dev); @@ -2355,7 +2355,7 @@ i40evf_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) return ret; } -static void +static int i40evf_dev_close(struct rte_eth_dev *dev) { struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -2387,6 +2387,7 @@ i40evf_dev_close(struct rte_eth_dev *dev) vf->aq_resp = NULL; hw->adapter_closed = 1; + return 0; } /* diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c index c3aa4cd725..4860a94d4c 100644 --- a/drivers/net/iavf/iavf_ethdev.c +++ b/drivers/net/iavf/iavf_ethdev.c @@ -32,7 +32,7 @@ static int iavf_dev_configure(struct rte_eth_dev *dev); static int iavf_dev_start(struct rte_eth_dev *dev); static void iavf_dev_stop(struct rte_eth_dev *dev); -static void iavf_dev_close(struct rte_eth_dev *dev); +static int iavf_dev_close(struct rte_eth_dev *dev); static int iavf_dev_reset(struct rte_eth_dev *dev); static int iavf_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info); @@ -1408,7 +1408,7 @@ iavf_dev_init(struct rte_eth_dev *eth_dev) return 0; } -static void +static int iavf_dev_close(struct rte_eth_dev *dev) { struct iavf_hw *hw = IAVF_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -1428,6 +1428,7 @@ iavf_dev_close(struct rte_eth_dev *dev) rte_intr_callback_unregister(intr_handle, iavf_dev_interrupt_handler, dev); iavf_disable_irq0(hw); + return 0; } static int diff --git a/drivers/net/ice/ice_dcf_ethdev.c b/drivers/net/ice/ice_dcf_ethdev.c index 2faed3cc7a..5b626cb641 100644 --- a/drivers/net/ice/ice_dcf_ethdev.c +++ b/drivers/net/ice/ice_dcf_ethdev.c @@ -847,13 +847,13 @@ ice_dcf_stats_reset(struct rte_eth_dev *dev) return 0; } -static void +static int ice_dcf_dev_close(struct rte_eth_dev *dev) { struct ice_dcf_adapter *adapter = dev->data->dev_private; if (rte_eal_process_type() != RTE_PROC_PRIMARY) - return; + return 0; dev->dev_ops = NULL; dev->rx_pkt_burst = NULL; @@ -861,6 +861,8 @@ ice_dcf_dev_close(struct rte_eth_dev *dev) ice_dcf_uninit_parent_adapter(dev); ice_dcf_uninit_hw(dev, &adapter->real_hw); + + return 0; } static int diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c index 8d435e8892..042ee6def0 100644 --- a/drivers/net/ice/ice_ethdev.c +++ b/drivers/net/ice/ice_ethdev.c @@ -74,7 +74,7 @@ static struct proto_xtr_ol_flag ice_proto_xtr_ol_flag_params[] = { static int ice_dev_configure(struct rte_eth_dev *dev); static int ice_dev_start(struct rte_eth_dev *dev); static void ice_dev_stop(struct rte_eth_dev *dev); -static void ice_dev_close(struct rte_eth_dev *dev); +static int ice_dev_close(struct rte_eth_dev *dev); static int ice_dev_reset(struct rte_eth_dev *dev); static int ice_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info); @@ -2389,7 +2389,7 @@ ice_dev_stop(struct rte_eth_dev *dev) pf->adapter_stopped = true; } -static void +static int ice_dev_close(struct rte_eth_dev *dev) { struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(dev->data->dev_private); @@ -2437,6 +2437,8 @@ ice_dev_close(struct rte_eth_dev *dev) /* unregister callback func from eal lib */ rte_intr_callback_unregister(intr_handle, ice_interrupt_handler, dev); + + return 0; } static int diff --git a/drivers/net/igc/igc_ethdev.c b/drivers/net/igc/igc_ethdev.c index 6ab3ee909d..99014a369c 100644 --- a/drivers/net/igc/igc_ethdev.c +++ b/drivers/net/igc/igc_ethdev.c @@ -183,7 +183,7 @@ static void eth_igc_stop(struct rte_eth_dev *dev); static int eth_igc_start(struct rte_eth_dev *dev); static int eth_igc_set_link_up(struct rte_eth_dev *dev); static int eth_igc_set_link_down(struct rte_eth_dev *dev); -static void eth_igc_close(struct rte_eth_dev *dev); +static int eth_igc_close(struct rte_eth_dev *dev); static int eth_igc_reset(struct rte_eth_dev *dev); static int eth_igc_promiscuous_enable(struct rte_eth_dev *dev); static int eth_igc_promiscuous_disable(struct rte_eth_dev *dev); @@ -1170,7 +1170,7 @@ igc_dev_free_queues(struct rte_eth_dev *dev) dev->data->nb_tx_queues = 0; } -static void +static int eth_igc_close(struct rte_eth_dev *dev) { struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); @@ -1204,6 +1204,8 @@ eth_igc_close(struct rte_eth_dev *dev) /* Reset any pending lock */ igc_reset_swfw_lock(hw); + + return 0; } static void diff --git a/drivers/net/ionic/ionic_ethdev.c b/drivers/net/ionic/ionic_ethdev.c index 800f6e5d64..1775fd29b7 100644 --- a/drivers/net/ionic/ionic_ethdev.c +++ b/drivers/net/ionic/ionic_ethdev.c @@ -25,7 +25,7 @@ static int ionic_dev_configure(struct rte_eth_dev *dev); static int ionic_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu); static int ionic_dev_start(struct rte_eth_dev *dev); static void ionic_dev_stop(struct rte_eth_dev *dev); -static void ionic_dev_close(struct rte_eth_dev *dev); +static int ionic_dev_close(struct rte_eth_dev *dev); static int ionic_dev_set_link_up(struct rte_eth_dev *dev); static int ionic_dev_set_link_down(struct rte_eth_dev *dev); static int ionic_dev_link_update(struct rte_eth_dev *eth_dev, @@ -956,7 +956,7 @@ ionic_dev_stop(struct rte_eth_dev *eth_dev) /* * Reset and stop device. */ -static void +static int ionic_dev_close(struct rte_eth_dev *eth_dev) { struct ionic_lif *lif = IONIC_ETH_DEV_TO_LIF(eth_dev); @@ -967,14 +967,16 @@ ionic_dev_close(struct rte_eth_dev *eth_dev) err = ionic_lif_stop(lif); if (err) { IONIC_PRINT(ERR, "Cannot stop LIF: %d", err); - return; + return -1; } err = eth_ionic_dev_uninit(eth_dev); if (err) { IONIC_PRINT(ERR, "Cannot destroy LIF: %d", err); - return; + return -1; } + + return 0; } static int diff --git a/drivers/net/ipn3ke/ipn3ke_representor.c b/drivers/net/ipn3ke/ipn3ke_representor.c index b673c49149..d49abbf758 100644 --- a/drivers/net/ipn3ke/ipn3ke_representor.c +++ b/drivers/net/ipn3ke/ipn3ke_representor.c @@ -208,7 +208,7 @@ ipn3ke_rpst_dev_stop(struct rte_eth_dev *dev) } } -static void +static int ipn3ke_rpst_dev_close(struct rte_eth_dev *dev) { struct ipn3ke_hw *hw = IPN3KE_DEV_PRIVATE_TO_HW(dev); @@ -221,6 +221,8 @@ ipn3ke_rpst_dev_close(struct rte_eth_dev *dev) /* Disable the RX path */ ipn3ke_xmac_rx_disable(hw, rpst->port_id, 0); } + + return 0; } /* diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index fd0cb9b0e2..5c12a575c2 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -147,7 +147,7 @@ static int ixgbe_dev_start(struct rte_eth_dev *dev); static void ixgbe_dev_stop(struct rte_eth_dev *dev); static int ixgbe_dev_set_link_up(struct rte_eth_dev *dev); static int ixgbe_dev_set_link_down(struct rte_eth_dev *dev); -static void ixgbe_dev_close(struct rte_eth_dev *dev); +static int ixgbe_dev_close(struct rte_eth_dev *dev); static int ixgbe_dev_reset(struct rte_eth_dev *dev); static int ixgbe_dev_promiscuous_enable(struct rte_eth_dev *dev); static int ixgbe_dev_promiscuous_disable(struct rte_eth_dev *dev); @@ -251,7 +251,7 @@ static int ixgbevf_dev_start(struct rte_eth_dev *dev); static int ixgbevf_dev_link_update(struct rte_eth_dev *dev, int wait_to_complete); static void ixgbevf_dev_stop(struct rte_eth_dev *dev); -static void ixgbevf_dev_close(struct rte_eth_dev *dev); +static int ixgbevf_dev_close(struct rte_eth_dev *dev); static int ixgbevf_dev_reset(struct rte_eth_dev *dev); static void ixgbevf_intr_disable(struct rte_eth_dev *dev); static void ixgbevf_intr_enable(struct rte_eth_dev *dev); @@ -2994,7 +2994,7 @@ ixgbe_dev_set_link_down(struct rte_eth_dev *dev) /* * Reset and stop device. */ -static void +static int ixgbe_dev_close(struct rte_eth_dev *dev) { struct ixgbe_hw *hw = @@ -3065,6 +3065,7 @@ ixgbe_dev_close(struct rte_eth_dev *dev) rte_free(dev->security_ctx); #endif + return 0; } /* @@ -5449,7 +5450,7 @@ ixgbevf_dev_stop(struct rte_eth_dev *dev) adapter->rss_reta_updated = 0; } -static void +static int ixgbevf_dev_close(struct rte_eth_dev *dev) { struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -5478,6 +5479,8 @@ ixgbevf_dev_close(struct rte_eth_dev *dev) rte_intr_disable(intr_handle); rte_intr_callback_unregister(intr_handle, ixgbevf_dev_interrupt_handler, dev); + + return 0; } /* diff --git a/drivers/net/kni/rte_eth_kni.c b/drivers/net/kni/rte_eth_kni.c index 831fe96c96..aa365a57de 100644 --- a/drivers/net/kni/rte_eth_kni.c +++ b/drivers/net/kni/rte_eth_kni.c @@ -198,7 +198,7 @@ eth_kni_dev_stop(struct rte_eth_dev *dev) dev->data->dev_link.link_status = 0; } -static void +static int eth_kni_close(struct rte_eth_dev *eth_dev) { struct pmd_internals *internals; @@ -214,6 +214,8 @@ eth_kni_close(struct rte_eth_dev *eth_dev) if (ret) PMD_LOG(WARNING, "Not able to release kni for %s", eth_dev->data->name); + + return 0; } static int diff --git a/drivers/net/liquidio/lio_ethdev.c b/drivers/net/liquidio/lio_ethdev.c index 2258838c4c..d7df0c7853 100644 --- a/drivers/net/liquidio/lio_ethdev.c +++ b/drivers/net/liquidio/lio_ethdev.c @@ -1550,7 +1550,7 @@ lio_dev_set_link_down(struct rte_eth_dev *eth_dev) * @return * - nothing */ -static void +static int lio_dev_close(struct rte_eth_dev *eth_dev) { struct lio_device *lio_dev = LIO_DEV(eth_dev); @@ -1581,6 +1581,8 @@ lio_dev_close(struct rte_eth_dev *eth_dev) /* Delete all queues */ lio_dev_clear_queues(eth_dev); + + return 0; } /** diff --git a/drivers/net/memif/rte_eth_memif.c b/drivers/net/memif/rte_eth_memif.c index c1c7e9f8d8..c00b9702a9 100644 --- a/drivers/net/memif/rte_eth_memif.c +++ b/drivers/net/memif/rte_eth_memif.c @@ -1203,7 +1203,7 @@ memif_dev_start(struct rte_eth_dev *dev) return ret; } -static void +static int memif_dev_close(struct rte_eth_dev *dev) { struct pmd_internals *pmd = dev->data->dev_private; @@ -1224,6 +1224,8 @@ memif_dev_close(struct rte_eth_dev *dev) } rte_free(dev->process_private); + + return 0; } static int diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index 71061a720f..df59314b66 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -370,7 +370,7 @@ mlx4_dev_stop(struct rte_eth_dev *dev) * @param dev * Pointer to Ethernet device structure. */ -static void +static int mlx4_dev_close(struct rte_eth_dev *dev) { struct mlx4_priv *priv = dev->data->dev_private; @@ -400,6 +400,7 @@ mlx4_dev_close(struct rte_eth_dev *dev) MLX4_ASSERT(priv->ctx == NULL); mlx4_intr_uninstall(priv); memset(priv, 0, sizeof(*priv)); + return 0; } static const struct eth_dev_ops mlx4_dev_ops = { diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index 1e4c695f84..e8685b216f 100644 --- a/drivers/net/mlx5/mlx5.c +++ b/drivers/net/mlx5/mlx5.c @@ -1338,7 +1338,7 @@ mlx5_proc_priv_uninit(struct rte_eth_dev *dev) * @param dev * Pointer to Ethernet device structure. */ -void +int mlx5_dev_close(struct rte_eth_dev *dev) { struct mlx5_priv *priv = dev->data->dev_private; @@ -1348,14 +1348,14 @@ mlx5_dev_close(struct rte_eth_dev *dev) if (rte_eal_process_type() == RTE_PROC_SECONDARY) { /* Check if process_private released. */ if (!dev->process_private) - return; + return 0; mlx5_tx_uar_uninit_secondary(dev); mlx5_proc_priv_uninit(dev); rte_eth_dev_release_port(dev); - return; + return 0; } if (!priv->sh) - return; + return 0; DRV_LOG(DEBUG, "port %u closing device \"%s\"", dev->data->port_id, ((priv->sh->ctx != NULL) ? @@ -1478,6 +1478,7 @@ mlx5_dev_close(struct rte_eth_dev *dev) * it is freed when dev_private is freed. */ dev->data->mac_addrs = NULL; + return 0; } /** diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index 78d6eb7281..b1308ba594 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -767,7 +767,7 @@ int mlx5_proc_priv_init(struct rte_eth_dev *dev); int mlx5_udp_tunnel_port_add(struct rte_eth_dev *dev, struct rte_eth_udp_tunnel *udp_tunnel); uint16_t mlx5_eth_find_next(uint16_t port_id, struct rte_pci_device *pci_dev); -void mlx5_dev_close(struct rte_eth_dev *dev); +int mlx5_dev_close(struct rte_eth_dev *dev); /* Macro to iterate over all valid ports for mlx5 driver. */ #define MLX5_ETH_FOREACH_DEV(port_id, pci_dev) \ diff --git a/drivers/net/mvneta/mvneta_ethdev.c b/drivers/net/mvneta/mvneta_ethdev.c index 673a8e2b3a..b13e2c52f3 100644 --- a/drivers/net/mvneta/mvneta_ethdev.c +++ b/drivers/net/mvneta/mvneta_ethdev.c @@ -429,7 +429,7 @@ mvneta_dev_stop(struct rte_eth_dev *dev) * @param dev * Pointer to Ethernet device structure. */ -static void +static int mvneta_dev_close(struct rte_eth_dev *dev) { struct mvneta_priv *priv = dev->data->dev_private; @@ -455,6 +455,8 @@ mvneta_dev_close(struct rte_eth_dev *dev) mvneta_neta_deinit(); rte_mvep_deinit(MVEP_MOD_T_NETA); } + + return 0; } /** diff --git a/drivers/net/mvpp2/mrvl_ethdev.c b/drivers/net/mvpp2/mrvl_ethdev.c index 96b27dfd30..b40169daba 100644 --- a/drivers/net/mvpp2/mrvl_ethdev.c +++ b/drivers/net/mvpp2/mrvl_ethdev.c @@ -855,7 +855,7 @@ mrvl_dev_stop(struct rte_eth_dev *dev) * @param dev * Pointer to Ethernet device structure. */ -static void +static int mrvl_dev_close(struct rte_eth_dev *dev) { struct mrvl_priv *priv = dev->data->dev_private; @@ -915,6 +915,8 @@ mrvl_dev_close(struct rte_eth_dev *dev) mrvl_deinit_pp2(); rte_mvep_deinit(MVEP_MOD_T_PP2); } + + return 0; } /** diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c index fd91c0e491..f02f546882 100644 --- a/drivers/net/netvsc/hn_ethdev.c +++ b/drivers/net/netvsc/hn_ethdev.c @@ -841,13 +841,15 @@ hn_dev_stop(struct rte_eth_dev *dev) hn_vf_stop(dev); } -static void +static int hn_dev_close(struct rte_eth_dev *dev) { PMD_INIT_FUNC_TRACE(); hn_vf_close(dev); hn_dev_free_queues(dev); + + return 0; } static const struct eth_dev_ops hn_eth_dev_ops = { diff --git a/drivers/net/nfb/nfb_ethdev.c b/drivers/net/nfb/nfb_ethdev.c index b039ab6fc2..c3c3d003f1 100644 --- a/drivers/net/nfb/nfb_ethdev.c +++ b/drivers/net/nfb/nfb_ethdev.c @@ -209,7 +209,7 @@ nfb_eth_dev_info(struct rte_eth_dev *dev, * @param dev * Pointer to Ethernet device structure. */ -static void +static int nfb_eth_dev_close(struct rte_eth_dev *dev) { struct pmd_internals *internals = dev->data->dev_private; @@ -235,6 +235,8 @@ nfb_eth_dev_close(struct rte_eth_dev *dev) rte_free(dev->data->mac_addrs); dev->data->mac_addrs = NULL; + + return 0; } /** diff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c index 99946279db..c20d71cdc3 100644 --- a/drivers/net/nfp/nfp_net.c +++ b/drivers/net/nfp/nfp_net.c @@ -50,7 +50,7 @@ #include /* Prototypes */ -static void nfp_net_close(struct rte_eth_dev *dev); +static int nfp_net_close(struct rte_eth_dev *dev); static int nfp_net_configure(struct rte_eth_dev *dev); static void nfp_net_dev_interrupt_handler(void *param); static void nfp_net_dev_interrupt_delayed_handler(void *param); @@ -864,7 +864,7 @@ nfp_net_set_link_down(struct rte_eth_dev *dev) } /* Reset and stop device. The device can not be restarted. */ -static void +static int nfp_net_close(struct rte_eth_dev *dev) { struct nfp_net_hw *hw; @@ -906,6 +906,8 @@ nfp_net_close(struct rte_eth_dev *dev) * The ixgbe PMD driver disables the pcie master on the * device. The i40e does not... */ + + return 0; } static int diff --git a/drivers/net/octeontx/octeontx_ethdev.c b/drivers/net/octeontx/octeontx_ethdev.c index 76c69294d0..946844ca0b 100644 --- a/drivers/net/octeontx/octeontx_ethdev.c +++ b/drivers/net/octeontx/octeontx_ethdev.c @@ -478,7 +478,7 @@ octeontx_dev_configure(struct rte_eth_dev *dev) return 0; } -static void +static int octeontx_dev_close(struct rte_eth_dev *dev) { struct octeontx_txq *txq = NULL; @@ -517,6 +517,8 @@ octeontx_dev_close(struct rte_eth_dev *dev) dev->tx_pkt_burst = NULL; dev->rx_pkt_burst = NULL; + + return 0; } static int diff --git a/drivers/net/octeontx2/otx2_ethdev.c b/drivers/net/octeontx2/otx2_ethdev.c index 7425ee55be..d9bcf004c6 100644 --- a/drivers/net/octeontx2/otx2_ethdev.c +++ b/drivers/net/octeontx2/otx2_ethdev.c @@ -2222,7 +2222,7 @@ otx2_nix_dev_start(struct rte_eth_dev *eth_dev) } static int otx2_nix_dev_reset(struct rte_eth_dev *eth_dev); -static void otx2_nix_dev_close(struct rte_eth_dev *eth_dev); +static int otx2_nix_dev_close(struct rte_eth_dev *eth_dev); /* Initialize and register driver with DPDK Application */ static const struct eth_dev_ops otx2_eth_dev_ops = { @@ -2635,10 +2635,11 @@ otx2_eth_dev_uninit(struct rte_eth_dev *eth_dev, bool mbox_close) return 0; } -static void +static int otx2_nix_dev_close(struct rte_eth_dev *eth_dev) { otx2_eth_dev_uninit(eth_dev, true); + return 0; } static int diff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c index 668cbd1fc7..76e704a65a 100644 --- a/drivers/net/pcap/rte_eth_pcap.c +++ b/drivers/net/pcap/rte_eth_pcap.c @@ -728,7 +728,7 @@ eth_stats_reset(struct rte_eth_dev *dev) return 0; } -static void +static int eth_dev_close(struct rte_eth_dev *dev) { unsigned int i; @@ -748,6 +748,7 @@ eth_dev_close(struct rte_eth_dev *dev) } } + return 0; } static void diff --git a/drivers/net/pfe/pfe_ethdev.c b/drivers/net/pfe/pfe_ethdev.c index 368acfa554..8867b61a9d 100644 --- a/drivers/net/pfe/pfe_ethdev.c +++ b/drivers/net/pfe/pfe_ethdev.c @@ -398,14 +398,14 @@ pfe_eth_exit(struct rte_eth_dev *dev, struct pfe *pfe) pfe->nb_devs--; } -static void +static int pfe_eth_close(struct rte_eth_dev *dev) { if (!dev) - return; + return -1; if (!g_pfe) - return; + return -1; pfe_eth_exit(dev, g_pfe); @@ -415,6 +415,8 @@ pfe_eth_close(struct rte_eth_dev *dev) rte_free(g_pfe); g_pfe = NULL; } + + return 0; } static int diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c index 70d48e48ef..7dc5fd1565 100644 --- a/drivers/net/qede/qede_ethdev.c +++ b/drivers/net/qede/qede_ethdev.c @@ -1542,7 +1542,7 @@ static void qede_poll_sp_sb_cb(void *param) } } -static void qede_dev_close(struct rte_eth_dev *eth_dev) +static int qede_dev_close(struct rte_eth_dev *eth_dev) { struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev); struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev); @@ -1586,6 +1586,8 @@ static void qede_dev_close(struct rte_eth_dev *eth_dev) if (ECORE_IS_CMT(edev)) rte_eal_alarm_cancel(qede_poll_sp_sb_cb, (void *)eth_dev); + + return 0; } static int diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index acee3e48e4..f1b857358c 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -318,7 +318,7 @@ sfc_dev_set_link_down(struct rte_eth_dev *dev) return 0; } -static void +static int sfc_dev_close(struct rte_eth_dev *dev) { struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); @@ -364,6 +364,8 @@ sfc_dev_close(struct rte_eth_dev *dev) dev->process_private = NULL; free(sa); + + return 0; } static int diff --git a/drivers/net/softnic/rte_eth_softnic.c b/drivers/net/softnic/rte_eth_softnic.c index 866d17a93c..491a308c11 100644 --- a/drivers/net/softnic/rte_eth_softnic.c +++ b/drivers/net/softnic/rte_eth_softnic.c @@ -201,10 +201,10 @@ pmd_dev_stop(struct rte_eth_dev *dev) softnic_mtr_free(p); } -static void +static int pmd_dev_close(struct rte_eth_dev *dev __rte_unused) { - return; + return 0; } static int diff --git a/drivers/net/szedata2/rte_eth_szedata2.c b/drivers/net/szedata2/rte_eth_szedata2.c index a17c53577c..daa40cfd6c 100644 --- a/drivers/net/szedata2/rte_eth_szedata2.c +++ b/drivers/net/szedata2/rte_eth_szedata2.c @@ -1155,7 +1155,7 @@ eth_tx_queue_release(void *q) } } -static void +static int eth_dev_close(struct rte_eth_dev *dev) { struct pmd_internals *internals = dev->data->dev_private; @@ -1180,6 +1180,8 @@ eth_dev_close(struct rte_eth_dev *dev) rte_free(dev->data->mac_addrs); dev->data->mac_addrs = NULL; + + return 0; } static int diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c index 339f24bf82..6bce90c531 100644 --- a/drivers/net/tap/rte_eth_tap.c +++ b/drivers/net/tap/rte_eth_tap.c @@ -1032,7 +1032,7 @@ tap_stats_reset(struct rte_eth_dev *dev) return 0; } -static void +static int tap_dev_close(struct rte_eth_dev *dev) { int i; @@ -1078,6 +1078,8 @@ tap_dev_close(struct rte_eth_dev *dev) * Since TUN device has no more opened file descriptors * it will be removed from kernel */ + + return 0; } static void diff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c index d955a7ee23..649fe5c6e6 100644 --- a/drivers/net/thunderx/nicvf_ethdev.c +++ b/drivers/net/thunderx/nicvf_ethdev.c @@ -1852,7 +1852,7 @@ nicvf_vf_stop(struct rte_eth_dev *dev, struct nicvf *nic, bool cleanup) } } -static void +static int nicvf_dev_close(struct rte_eth_dev *dev) { size_t i; @@ -1869,6 +1869,8 @@ nicvf_dev_close(struct rte_eth_dev *dev) nicvf_periodic_alarm_stop(nicvf_vf_interrupt, nic->snicvf[i]); } + + return 0; } static int diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c index e55278af69..fb3b9ce043 100644 --- a/drivers/net/vhost/rte_eth_vhost.c +++ b/drivers/net/vhost/rte_eth_vhost.c @@ -1164,7 +1164,7 @@ eth_dev_stop(struct rte_eth_dev *dev) update_queuing_status(dev); } -static void +static int eth_dev_close(struct rte_eth_dev *dev) { struct pmd_internal *internal; @@ -1173,7 +1173,7 @@ eth_dev_close(struct rte_eth_dev *dev) internal = dev->data->dev_private; if (!internal) - return; + return 0; eth_dev_stop(dev); @@ -1201,6 +1201,8 @@ eth_dev_close(struct rte_eth_dev *dev) rte_free(vring_states[dev->data->port_id]); vring_states[dev->data->port_id] = NULL; + + return 0; } static int diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c index dc0093bdf0..1731fc6750 100644 --- a/drivers/net/virtio/virtio_ethdev.c +++ b/drivers/net/virtio/virtio_ethdev.c @@ -704,7 +704,7 @@ virtio_alloc_queues(struct rte_eth_dev *dev) static void virtio_queues_unbind_intr(struct rte_eth_dev *dev); -static void +static int virtio_dev_close(struct rte_eth_dev *dev) { struct virtio_hw *hw = dev->data->dev_private; @@ -713,7 +713,7 @@ virtio_dev_close(struct rte_eth_dev *dev) PMD_INIT_LOG(DEBUG, "virtio_dev_close"); if (!hw->opened) - return; + return 0; hw->opened = false; /* reset the NIC */ @@ -743,6 +743,8 @@ virtio_dev_close(struct rte_eth_dev *dev) if (!hw->modern) rte_pci_ioport_unmap(VTPCI_IO(hw)); } + + return 0; } static int diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c index 815fba2f55..4efb48350c 100644 --- a/drivers/net/vmxnet3/vmxnet3_ethdev.c +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c @@ -64,7 +64,7 @@ static int eth_vmxnet3_dev_uninit(struct rte_eth_dev *eth_dev); static int vmxnet3_dev_configure(struct rte_eth_dev *dev); static int vmxnet3_dev_start(struct rte_eth_dev *dev); static void vmxnet3_dev_stop(struct rte_eth_dev *dev); -static void vmxnet3_dev_close(struct rte_eth_dev *dev); +static int vmxnet3_dev_close(struct rte_eth_dev *dev); static void vmxnet3_dev_set_rxmode(struct vmxnet3_hw *hw, uint32_t feature, int set); static int vmxnet3_dev_promiscuous_enable(struct rte_eth_dev *dev); static int vmxnet3_dev_promiscuous_disable(struct rte_eth_dev *dev); @@ -888,13 +888,15 @@ vmxnet3_free_queues(struct rte_eth_dev *dev) /* * Reset and stop device. */ -static void +static int vmxnet3_dev_close(struct rte_eth_dev *dev) { PMD_INIT_FUNC_TRACE(); vmxnet3_dev_stop(dev); vmxnet3_free_queues(dev); + + return 0; } static void diff --git a/lib/librte_ethdev/rte_ethdev_core.h b/lib/librte_ethdev/rte_ethdev_core.h index 32407dd418..76308106bd 100644 --- a/lib/librte_ethdev/rte_ethdev_core.h +++ b/lib/librte_ethdev/rte_ethdev_core.h @@ -43,7 +43,7 @@ typedef int (*eth_dev_set_link_up_t)(struct rte_eth_dev *dev); typedef int (*eth_dev_set_link_down_t)(struct rte_eth_dev *dev); /**< @internal Function used to link down a configured Ethernet device. */ -typedef void (*eth_dev_close_t)(struct rte_eth_dev *dev); +typedef int (*eth_dev_close_t)(struct rte_eth_dev *dev); /**< @internal Function used to close a configured Ethernet device. */ typedef int (*eth_dev_reset_t)(struct rte_eth_dev *dev); From patchwork Sun Sep 13 22:06:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 77554 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id EB6E7A04C9; Mon, 14 Sep 2020 00:07:49 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id CDAF71C0B9; Mon, 14 Sep 2020 00:07:49 +0200 (CEST) Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) by dpdk.org (Postfix) with ESMTP id 412E0DE0 for ; Mon, 14 Sep 2020 00:07:48 +0200 (CEST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id 2977351E; Sun, 13 Sep 2020 18:07:47 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 13 Sep 2020 18:07:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=H6YS1Gylvj3KG 4Az5kECcukKS7qBJATUhtPehzWMZGw=; b=tH24r4pqbD0+P7DpTZR/xDhTe/RRA aZd2Ykvjh/JbI0D6hsOltIadKLWOj4Qc3EoylvoR4MuwSjO77ij/KT4OGgbk/h8G XG0KiwaV9+faqsQIr1+jEC0L9rFES8fGBY8II0M1y06oNqoVK5R7pV7Llq597hpp wXPZvYrt4gOYkPFSIlO6K9t5MDenxbMUIOppGQAjTKc6oMu3++iC0Z3yds6i5e3s NJduqkQ+pssFAzQQn//iUe2JIo+wD7vsmnozAutO4V31Thufoka2SvT6X/EcG54f Gx3sCGWFZ33nH69YH8Ra8WjVFIrV2Uj+IveK2BN28vmr1IjCyQ1Nlk09w== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=H6YS1Gylvj3KG4Az5kECcukKS7qBJATUhtPehzWMZGw=; b=WY8h16y4 pgAbQ9coyvSLDkQd7X6hfp/AuCxQkM8gUSCC05onlBAuR82DbnJsEkimNtktgFhh Kpe/+po9Jbd4fQsc8Y3P2FDbKDDBmVzY9VzFAIP0AT4+Pxrajy1EKmb/yN6jhLAH wPf5NpOKmGrzctP719HIxVq2/NGzVvgA4hUGWyd8PAvJCZJvMHGw2Am/npv8qAjT HzCnXdeHeLH2XE3FYuenOqA0PZ+OqPOxU8R63qSozVBqjh4GPpygDF43qznAVZzA xy7Bh0+yzONVeQ5el3i0hjGYa/mCFhiKRBfNdVERv9FtKhpUu2c3BrFBV96sdYx0 8YXvPiAVmDtzCw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeihedgtdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepvdehgfeivdejgedtveehfefhteelfefgieevgfffveefjeegtdfg uedthedtgeevnecukfhppeejjedrudefgedrvddtfedrudekgeenucevlhhushhtvghruf hiiigvpedunecurfgrrhgrmhepmhgrihhlfhhrohhmpehthhhomhgrshesmhhonhhjrghl ohhnrdhnvght X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id DEFF03064674; Sun, 13 Sep 2020 18:07:45 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, arybchenko@solarflare.com, "John W. Linville" , Anatoly Burakov Date: Mon, 14 Sep 2020 00:06:54 +0200 Message-Id: <20200913220711.3768597-4-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200913220711.3768597-1-thomas@monjalon.net> References: <20200913220711.3768597-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 03/20] net/af_packet: 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" The flag RTE_ETH_DEV_CLOSE_REMOVE is set so all port resources can be freed by rte_eth_dev_close(). Freeing of private port resources is moved from the ".remove(device)" to the ".dev_close(port)" operation. Signed-off-by: Thomas Monjalon Reviewed-by: Ferruh Yigit --- drivers/net/af_packet/rte_eth_af_packet.c | 56 ++++++++++++----------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c index 7d0ff1cbb3..3ab6f4d388 100644 --- a/drivers/net/af_packet/rte_eth_af_packet.c +++ b/drivers/net/af_packet/rte_eth_af_packet.c @@ -377,8 +377,32 @@ eth_stats_reset(struct rte_eth_dev *dev) } static int -eth_dev_close(struct rte_eth_dev *dev __rte_unused) +eth_dev_close(struct rte_eth_dev *dev) { + struct pmd_internals *internals; + struct tpacket_req *req; + unsigned q; + + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return 0; + + PMD_LOG(INFO, "Closing AF_PACKET ethdev on NUMA socket %u", + rte_socket_id()); + + internals = dev->data->dev_private; + req = &internals->req; + for (q = 0; q < internals->nb_queues; q++) { + munmap(internals->rx_queue[q].map, + 2 * req->tp_block_size * req->tp_block_nr); + rte_free(internals->rx_queue[q].rd); + rte_free(internals->tx_queue[q].rd); + } + free(internals->if_name); + rte_free(internals->rx_queue); + rte_free(internals->tx_queue); + + /* mac_addrs must not be freed alone because part of dev_private */ + dev->data->mac_addrs = NULL; return 0; } @@ -835,6 +859,7 @@ rte_pmd_init_internals(struct rte_vdev_device *dev, data->nb_tx_queues = (uint16_t)nb_queues; data->dev_link = pmd_link; data->mac_addrs = &(*internals)->eth_addr; + data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; (*eth_dev)->dev_ops = &ops; @@ -1033,13 +1058,7 @@ rte_pmd_af_packet_probe(struct rte_vdev_device *dev) static int rte_pmd_af_packet_remove(struct rte_vdev_device *dev) { - struct rte_eth_dev *eth_dev = NULL; - struct pmd_internals *internals; - struct tpacket_req *req; - unsigned q; - - PMD_LOG(INFO, "Closing AF_PACKET ethdev on numa socket %u", - rte_socket_id()); + struct rte_eth_dev *eth_dev; if (dev == NULL) return -1; @@ -1047,26 +1066,9 @@ rte_pmd_af_packet_remove(struct rte_vdev_device *dev) /* find the ethdev entry */ eth_dev = rte_eth_dev_allocated(rte_vdev_device_name(dev)); if (eth_dev == NULL) - return -1; - - /* mac_addrs must not be freed alone because part of dev_private */ - eth_dev->data->mac_addrs = NULL; - - if (rte_eal_process_type() != RTE_PROC_PRIMARY) - return rte_eth_dev_release_port(eth_dev); - - internals = eth_dev->data->dev_private; - req = &internals->req; - for (q = 0; q < internals->nb_queues; q++) { - munmap(internals->rx_queue[q].map, - 2 * req->tp_block_size * req->tp_block_nr); - rte_free(internals->rx_queue[q].rd); - rte_free(internals->tx_queue[q].rd); - } - free(internals->if_name); - rte_free(internals->rx_queue); - rte_free(internals->tx_queue); + return 0; /* port already released */ + eth_dev_close(eth_dev); rte_eth_dev_release_port(eth_dev); return 0; From patchwork Sun Sep 13 22:06:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 77555 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9BFB7A04C9; Mon, 14 Sep 2020 00:07:56 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4EA461C0CF; Mon, 14 Sep 2020 00:07:53 +0200 (CEST) Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com [66.111.4.25]) by dpdk.org (Postfix) with ESMTP id 7F3DF1C0CE for ; Mon, 14 Sep 2020 00:07:51 +0200 (CEST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id B1B245C0143; Sun, 13 Sep 2020 18:07:50 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 13 Sep 2020 18:07:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=+rItr+eGdr/KD I4iTI+BB6urawpzJd7uwQIVVUCOx/Y=; b=NrKhgxhRx5S1R1jAstJNmXk3QI3pT 9/jag0nPeIF3mkXPLEczLHy7t/XHGdRjwQ8D+NGNiV8c7beKAXNF3OiYWzk8Sfo0 s1nYGCKvo6H+bxl+9i4KlxUMyG2JHo2vu8m9Tt+V2/tNHkkSoSy9w9o/Mip2h7fY 3ru1jfGJwJuqUUYkRjlQfCv0qEHyXTRencqZceVMuku5ikJ0Ot3cQ++MKEjm6OoL y4O+sf/KzsW0VoKEShCTFstV07ctgclBEhLKYkqbnWWr/5AlnFmZGY8SfI9Y+I2O ksVhf1aweoMHyN/4tsqiPhCaZedNt0V3sbP1/vUWv7+3PprgYYrdvZhoQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=+rItr+eGdr/KDI4iTI+BB6urawpzJd7uwQIVVUCOx/Y=; b=Q0XRvaHi QepgUiv1hSt3yl13KvZ5yJAk5IuCTHtm0xFFjgHTMWS/8jL27SFaun3Qg8tjaF3A FYL+rsDN04vOQUupCZNppwLu+efX2hIT82FgROFXLIP0s+B5UGkXpmDZaFeW4e9c uHRgfAxolrOhu3+E2jYNkLG2tyoOxGoWDeLbiIAzScSi6TbWVJ6Myn3ImVxDlJh+ 4QLpweezvEcoAZR+YyYC99aXs7JIftxbwqVlRpGHdd8gxI+mz3LztknSVHFDdKap 3rwkaSwyNzye0J5XX2iN3oZ6438KjqVPpdYAg2D0JxGlLzv3E09u/FLAZpIB1cTf sDQ/cfJB9mFz7Q== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeihedgtdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepvdehgfeivdejgedtveehfefhteelfefgieevgfffveefjeegtdfg uedthedtgeevnecukfhppeejjedrudefgedrvddtfedrudekgeenucevlhhushhtvghruf hiiigvpeegnecurfgrrhgrmhepmhgrihhlfhhrohhmpehthhhomhgrshesmhhonhhjrghl ohhnrdhnvght X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id B9185306467D; Sun, 13 Sep 2020 18:07:49 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, arybchenko@solarflare.com, Igor Russkikh , Pavel Belous , Anatoly Burakov Date: Mon, 14 Sep 2020 00:06:55 +0200 Message-Id: <20200913220711.3768597-5-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200913220711.3768597-1-thomas@monjalon.net> References: <20200913220711.3768597-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 04/20] net/atlantic: 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" The flag RTE_ETH_DEV_CLOSE_REMOVE is set so all port resources can be freed by rte_eth_dev_close(). Freeing of private port resources is moved from the ".remove(device)" to the ".dev_close(port)" operation. Signed-off-by: Thomas Monjalon Acked-by: Igor Russkikh --- drivers/net/atlantic/atl_ethdev.c | 62 ++++++++++++------------------- 1 file changed, 24 insertions(+), 38 deletions(-) diff --git a/drivers/net/atlantic/atl_ethdev.c b/drivers/net/atlantic/atl_ethdev.c index 1d76883c52..16721a011f 100644 --- a/drivers/net/atlantic/atl_ethdev.c +++ b/drivers/net/atlantic/atl_ethdev.c @@ -15,8 +15,6 @@ #include "hw_atl/hw_atl_b0_internal.h" static int eth_atl_dev_init(struct rte_eth_dev *eth_dev); -static int eth_atl_dev_uninit(struct rte_eth_dev *eth_dev); - static int atl_dev_configure(struct rte_eth_dev *dev); static int atl_dev_start(struct rte_eth_dev *dev); static void atl_dev_stop(struct rte_eth_dev *dev); @@ -381,6 +379,8 @@ eth_atl_dev_init(struct rte_eth_dev *eth_dev) if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; + eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; + /* Vendor and Device ID need to be set before init of shared code */ hw->device_id = pci_dev->id.device_id; hw->vendor_id = pci_dev->id.vendor_id; @@ -441,40 +441,6 @@ eth_atl_dev_init(struct rte_eth_dev *eth_dev) return err; } -static int -eth_atl_dev_uninit(struct rte_eth_dev *eth_dev) -{ - struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev); - struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; - struct aq_hw_s *hw; - - PMD_INIT_FUNC_TRACE(); - - if (rte_eal_process_type() != RTE_PROC_PRIMARY) - return -EPERM; - - hw = ATL_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private); - - if (hw->adapter_stopped == 0) - atl_dev_close(eth_dev); - - eth_dev->dev_ops = NULL; - eth_dev->rx_pkt_burst = NULL; - eth_dev->tx_pkt_burst = NULL; - - /* disable uio intr before callback unregister */ - rte_intr_disable(intr_handle); - rte_intr_callback_unregister(intr_handle, - atl_dev_interrupt_handler, eth_dev); - - rte_free(eth_dev->data->mac_addrs); - eth_dev->data->mac_addrs = NULL; - - pthread_mutex_destroy(&hw->mbox_mutex); - - return 0; -} - static int eth_atl_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, struct rte_pci_device *pci_dev) @@ -486,7 +452,7 @@ eth_atl_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, static int eth_atl_pci_remove(struct rte_pci_device *pci_dev) { - return rte_eth_dev_pci_generic_remove(pci_dev, eth_atl_dev_uninit); + return rte_eth_dev_pci_generic_remove(pci_dev, atl_dev_close); } static int @@ -721,12 +687,32 @@ atl_dev_set_link_down(struct rte_eth_dev *dev) static int atl_dev_close(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 aq_hw_s *hw; + PMD_INIT_FUNC_TRACE(); + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -EPERM; + + hw = ATL_DEV_PRIVATE_TO_HW(dev->data->dev_private); + atl_dev_stop(dev); atl_free_queues(dev); + dev->dev_ops = NULL; + dev->rx_pkt_burst = NULL; + dev->tx_pkt_burst = NULL; + + /* disable uio intr before callback unregister */ + rte_intr_disable(intr_handle); + rte_intr_callback_unregister(intr_handle, + atl_dev_interrupt_handler, dev); + + pthread_mutex_destroy(&hw->mbox_mutex); + return 0; } @@ -735,7 +721,7 @@ atl_dev_reset(struct rte_eth_dev *dev) { int ret; - ret = eth_atl_dev_uninit(dev); + ret = atl_dev_close(dev); if (ret) return ret; From patchwork Sun Sep 13 22:06:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 77556 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3072AA04C9; Mon, 14 Sep 2020 00:08:05 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 82AE81C0D5; Mon, 14 Sep 2020 00:07:55 +0200 (CEST) Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com [66.111.4.25]) by dpdk.org (Postfix) with ESMTP id 663541C0D1 for ; Mon, 14 Sep 2020 00:07:53 +0200 (CEST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id 16A255C014E; Sun, 13 Sep 2020 18:07:53 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 13 Sep 2020 18:07:53 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=bfhhSVySlPMJf EzfQ/I0W7cQbY7t8ZadgGbhmTmmmtw=; b=vX3gsUntIJrMuk++lt1PGWlD/b6h3 ueXl6sZfLZsAVr6UyY4Dhhcq2zlSAi67zA5OcuzVml03JaX6Z7/Qja744hGFRmCw UUxJV3NVLYfnNngoatQInVAvcO6CIhg5kxA2RTlGWgntKb54rVyXFFfS1KxmbpzC OtZyFbi+q6dDaYkPwjqYpfnx949lvCCIfOdyc1QyKqPB+P/Lpgwr3FwCXZEns7v7 h72cWVFM7g8tW8JO1pVLA7vCFIk/wX4+W5m72T+TK6j43feIp0nB3DsqTW/iE55t duwP0g1BJGiofFuB4DA/mNtXou+3amQd16cJcPIH3kYbQ6sh/a5sCNp5Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=bfhhSVySlPMJfEzfQ/I0W7cQbY7t8ZadgGbhmTmmmtw=; b=teC6LELg vrj3qvmtgPXu8u7ZycUmIMTcZiANr5bEVH9SZNGI7ad1sJbGztmLLxkPvGEaqEJr 7fCBiikODaQEdnT1bsGJ/rbxp6EFIi2PoiEOP3zQHx+Cet7i0PQ/hwAZpGsbZ2na 6BYfCfPq2kmlLwgEhO8St89k5AFzgYcGI7Q0xkwieDJyTY+bg/4kVIvQ4IvbOkdu VDs2M3cfEgkRehPCGydhHAPeSkUvfZcRORzuOpMV6qJwLsdcwpPnCZzbbx5JSHXq Ft+u/z0gcJJzuj1fwCitHbkemhqMiZhXcOSVxp4VDp4awTW9yDWWi/Sazxd7Ku/v 63g/uyRWS0egWQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeihedgtdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepvdehgfeivdejgedtveehfefhteelfefgieevgfffveefjeegtdfg uedthedtgeevnecukfhppeejjedrudefgedrvddtfedrudekgeenucevlhhushhtvghruf hiiigvpeegnecurfgrrhgrmhepmhgrihhlfhhrohhmpehthhhomhgrshesmhhonhhjrghl ohhnrdhnvght X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id 46D0E306467E; Sun, 13 Sep 2020 18:07:52 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, arybchenko@solarflare.com, Somalapuram Amaranath Date: Mon, 14 Sep 2020 00:06:56 +0200 Message-Id: <20200913220711.3768597-6-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200913220711.3768597-1-thomas@monjalon.net> References: <20200913220711.3768597-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 05/20] net/axgbe: 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" The flag RTE_ETH_DEV_CLOSE_REMOVE is set so all port resources can be freed by rte_eth_dev_close(). Freeing of private port resources is moved from the ".remove(device)" to the ".dev_close(port)" operation. The ".dev_close" callback is also called as part of the ".remove" one. Signed-off-by: Thomas Monjalon --- drivers/net/axgbe/axgbe_ethdev.c | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/drivers/net/axgbe/axgbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c index be6f7cbda6..c5e70ea0a1 100644 --- a/drivers/net/axgbe/axgbe_ethdev.c +++ b/drivers/net/axgbe/axgbe_ethdev.c @@ -10,7 +10,6 @@ #include "axgbe_regs.h" static int eth_axgbe_dev_init(struct rte_eth_dev *eth_dev); -static int eth_axgbe_dev_uninit(struct rte_eth_dev *eth_dev); static int axgbe_dev_configure(struct rte_eth_dev *dev); static int axgbe_dev_start(struct rte_eth_dev *dev); static void axgbe_dev_stop(struct rte_eth_dev *dev); @@ -378,14 +377,6 @@ axgbe_dev_stop(struct rte_eth_dev *dev) rte_bit_relaxed_set32(AXGBE_DOWN, &pdata->dev_state); } -/* Clear all resources like TX/RX queues. */ -static int -axgbe_dev_close(struct rte_eth_dev *dev) -{ - axgbe_dev_clear_queues(dev); - return 0; -} - static int axgbe_dev_promiscuous_enable(struct rte_eth_dev *dev) { @@ -1632,6 +1623,7 @@ eth_axgbe_dev_init(struct rte_eth_dev *eth_dev) int ret; eth_dev->dev_ops = &axgbe_eth_dev_ops; + eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; /* * For secondary processes, we don't initialise any further as primary @@ -1794,7 +1786,7 @@ eth_axgbe_dev_init(struct rte_eth_dev *eth_dev) } static int -eth_axgbe_dev_uninit(struct rte_eth_dev *eth_dev) +axgbe_dev_close(struct rte_eth_dev *eth_dev) { struct rte_pci_device *pci_dev; @@ -1827,7 +1819,7 @@ static int eth_axgbe_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, static int eth_axgbe_pci_remove(struct rte_pci_device *pci_dev) { - return rte_eth_dev_pci_generic_remove(pci_dev, eth_axgbe_dev_uninit); + return rte_eth_dev_pci_generic_remove(pci_dev, axgbe_dev_close); } static struct rte_pci_driver rte_axgbe_pmd = { From patchwork Sun Sep 13 22:06:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 77557 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4C00BA04C9; Mon, 14 Sep 2020 00:08:13 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9BDB01C0DB; Mon, 14 Sep 2020 00:07:58 +0200 (CEST) Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) by dpdk.org (Postfix) with ESMTP id 3A51D1C0CA for ; Mon, 14 Sep 2020 00:07:57 +0200 (CEST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id 1683D5D6; Sun, 13 Sep 2020 18:07:56 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 13 Sep 2020 18:07:56 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=ywgnR0vOO05xR RgCljfhZSVqq+keKlwrjGkAj6OcPzQ=; b=l6nD7uMHikUMrxBf0Rg11ikptzc7F VdlQpmqvuh+G4OpNuGAvoqP1CrSt6wahKGUkqdyXMvaOUqtCeKPUjc5jlDZhR21U EG7A5q8Y6rmyGWwHsUhhu/tctppJciusitCUljBGBT27cjz9PqXUny0abKroli3X DDyhZDMrEMz8aFp6Klms2AaTrDBj5FFGcsW1+R0qlla6+F9k8r9ZJRyD+Qc7Ivzq /e5eZWhud1YrFfv/sA7wOWCgLN5tntEypffo+lXGG5lFZgrrOT+aUX1hWB+40ZNN 7wD7gvltamGboXQGkgQZ79/PDwmd5IiqIRKbzdISsUtYYWFQq1qcAZ+kQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=ywgnR0vOO05xRRgCljfhZSVqq+keKlwrjGkAj6OcPzQ=; b=EKTb31Nc 1TA5Nh7KtDAZNAbgOPiJDGhQf5zF4VrjanL5iTkUPCzVy3CP/0hZxip6n/WWytEh 5a2uuo08/UN0A4/LqmLR6I8h51yiwXaZO6fFH5iyHwPAz1k23SjNSpv6+5nOq+fE pOAslvuJtB/GUlVqcX9VxKPrZOTLB12uRy8hBjefq+nrdRXLdFgPClqHlhjwOV7V 9BWfGeHjcikNt7wWj+JMPpTnra1Ma66MBgDueps+z7AIQGTVMjgAUFKnwgHNmhNc NpdpeEqPbhDbiHNBTaxGR4WbTSy992RotbDE6yODr0FcxjkUBg5nGv7fBYLWRhTQ 0WXtG3vtHiIy8A== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeihedgtdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepvdehgfeivdejgedtveehfefhteelfefgieevgfffveefjeegtdfg uedthedtgeevnecukfhppeejjedrudefgedrvddtfedrudekgeenucevlhhushhtvghruf hiiigvpeeinecurfgrrhgrmhepmhgrihhlfhhrohhmpehthhhomhgrshesmhhonhhjrghl ohhnrdhnvght X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id BCE243064674; Sun, 13 Sep 2020 18:07:54 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, arybchenko@solarflare.com, Chas Williams , "Wei Hu (Xavier)" , Anatoly Burakov Date: Mon, 14 Sep 2020 00:06:57 +0200 Message-Id: <20200913220711.3768597-7-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200913220711.3768597-1-thomas@monjalon.net> References: <20200913220711.3768597-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 06/20] net/bonding: 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" The flag RTE_ETH_DEV_CLOSE_REMOVE is set so all port resources can be freed by rte_eth_dev_close(). Freeing of private port resources is moved from the ".remove(device)" to the ".dev_close(port)" operation. Signed-off-by: Thomas Monjalon --- drivers/net/bonding/rte_eth_bond_pmd.c | 34 ++++++++++++-------------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index e1123deb83..726b47055b 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -2103,6 +2103,9 @@ bond_ethdev_close(struct rte_eth_dev *dev) int skipped = 0; struct rte_flow_error ferror; + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return 0; + RTE_BOND_LOG(INFO, "Closing bonded device %s", dev->device->name); while (internals->slave_count != skipped) { uint16_t port_id = internals->slaves[skipped].port_id; @@ -2119,6 +2122,17 @@ bond_ethdev_close(struct rte_eth_dev *dev) bond_flow_ops.flush(dev, &ferror); bond_ethdev_free_queues(dev); rte_bitmap_reset(internals->vlan_filter_bmp); + rte_bitmap_free(internals->vlan_filter_bmp); + rte_free(internals->vlan_filter_bmpmem); + + /* Try to release mempool used in mode6. If the bond + * device is not mode6, free the NULL is not problem. + */ + rte_mempool_free(internals->mode6.mempool); + + dev->dev_ops = NULL; + dev->rx_pkt_burst = NULL; + dev->tx_pkt_burst = NULL; return 0; } @@ -3195,6 +3209,7 @@ bond_alloc(struct rte_vdev_device *dev, uint8_t mode) } internals = eth_dev->data->dev_private; + eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; eth_dev->data->nb_rx_queues = (uint16_t)1; eth_dev->data->nb_tx_queues = (uint16_t)1; @@ -3414,14 +3429,10 @@ bond_remove(struct rte_vdev_device *dev) name = rte_vdev_device_name(dev); RTE_BOND_LOG(INFO, "Uninitializing pmd_bond for %s", name); - /* now free all data allocation - for eth_dev structure, - * dummy pci driver and internal (private) data - */ - /* find an ethdev entry */ eth_dev = rte_eth_dev_allocated(name); if (eth_dev == NULL) - return -ENODEV; + return 0; /* port already released */ if (rte_eal_process_type() != RTE_PROC_PRIMARY) return rte_eth_dev_release_port(eth_dev); @@ -3436,19 +3447,6 @@ bond_remove(struct rte_vdev_device *dev) bond_ethdev_stop(eth_dev); bond_ethdev_close(eth_dev); } - - eth_dev->dev_ops = NULL; - eth_dev->rx_pkt_burst = NULL; - eth_dev->tx_pkt_burst = NULL; - - internals = eth_dev->data->dev_private; - /* Try to release mempool used in mode6. If the bond - * device is not mode6, free the NULL is not problem. - */ - rte_mempool_free(internals->mode6.mempool); - rte_bitmap_free(internals->vlan_filter_bmp); - rte_free(internals->vlan_filter_bmpmem); - rte_eth_dev_release_port(eth_dev); return 0; From patchwork Sun Sep 13 22:06:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 77558 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id AE414A04C9; Mon, 14 Sep 2020 00:08:23 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 114FE1C0CE; Mon, 14 Sep 2020 00:08:01 +0200 (CEST) Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) by dpdk.org (Postfix) with ESMTP id 1FFB41C117 for ; Mon, 14 Sep 2020 00:07:59 +0200 (CEST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id 4C8865E8; Sun, 13 Sep 2020 18:07:58 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 13 Sep 2020 18:07:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=4ddyLO7c09sGz qdpZnq7JTWI/hdTFFSOirZoVYVdCvI=; b=j7fy36crkWVMBgAUuIVYCr06VNjR9 zJJbQ+YVSQHoXKUZKQtoTD/oXTso/y42Z0OGKou4eBK6MPM8EuXOQ9wNvkY19YiQ XPX2cOsj31+xIRNVzITxihTzLZyDjvSnN0j7NmPlgEGT1UJ70nNvuEkX03A0hOpv WfSFjzQ+Y1deR282JzgGkV2sJQ/pey0vddKKdGB9R5KtbX8gvGFSMnvR0zhaNtvn y+6vbDhbuSLBjXkp5U3lCDFHoky/F/9OW9RvloX0CLZp4Td8jEz1DWuuDosSH0dG eZLiqx51jauJXGO7mHx1kezW1GQyrPWo07LovJxg596V24IylV5ot6zaw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=4ddyLO7c09sGzqdpZnq7JTWI/hdTFFSOirZoVYVdCvI=; b=thBhacR1 JFP9MacIEK4Sd4sD8iotL6s/pEwOmmRRUsM06QXMNbKybbjqRtr8E9T07i3ZVA9a m7bFTt/guPvj+BJMJqVW5R+ttAEJy7qBJaxNWaIs4R7/7/o9syLLkPK1TKbwBNDf h91Dp1fGIGgK3bhu+7WApOqVqpVuEvkNl3o7jFlvPBeHRGVEtBU5KpUf/t+zT+8h 7SdWogn3Yk0AXJJ6FHf7bdR1sr4NecVB3hmvroiZ01wICcH3yD1zmpoOyIWJTQdc 9v8UNsdGOHK50VMeVR4zZbd8k+vJe5b/n1RzZkK3WHhUtRaPmuySRxFARSpjgQgU jZCUpXOEJcNnDg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeihedgtdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepvdehgfeivdejgedtveehfefhteelfefgieevgfffveefjeegtdfg uedthedtgeevnecukfhppeejjedrudefgedrvddtfedrudekgeenucevlhhushhtvghruf hiiigvpeeinecurfgrrhgrmhepmhgrihhlfhhrohhmpehthhhomhgrshesmhhonhhjrghl ohhnrdhnvght X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id 3CAA53064674; Sun, 13 Sep 2020 18:07:57 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, arybchenko@solarflare.com, Gaetan Rivet Date: Mon, 14 Sep 2020 00:06:58 +0200 Message-Id: <20200913220711.3768597-8-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200913220711.3768597-1-thomas@monjalon.net> References: <20200913220711.3768597-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 07/20] net/failsafe: 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" The flag RTE_ETH_DEV_CLOSE_REMOVE is set so all port resources can be freed by rte_eth_dev_close(). Freeing of private port resources is moved from the ".remove(device)" to the ".dev_close(port)" operation. Signed-off-by: Thomas Monjalon --- drivers/net/failsafe/failsafe.c | 25 ++-------- drivers/net/failsafe/failsafe_ops.c | 61 +++++++++++++++---------- drivers/net/failsafe/failsafe_private.h | 1 + 3 files changed, 42 insertions(+), 45 deletions(-) diff --git a/drivers/net/failsafe/failsafe.c b/drivers/net/failsafe/failsafe.c index 4a4b7ceab6..44d47e8f72 100644 --- a/drivers/net/failsafe/failsafe.c +++ b/drivers/net/failsafe/failsafe.c @@ -60,12 +60,6 @@ fs_sub_device_alloc(struct rte_eth_dev *dev, return 0; } -static void -fs_sub_device_free(struct rte_eth_dev *dev) -{ - rte_free(PRIV(dev)->subs); -} - static void fs_hotplug_alarm(void *arg); int @@ -186,6 +180,7 @@ fs_eth_dev_create(struct rte_vdev_device *vdev) ERROR("Unable to allocate rte_eth_dev"); return -1; } + dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; priv = PRIV(dev); priv->data = dev->data; priv->rxp = FS_RX_PROXY_INIT; @@ -285,7 +280,7 @@ fs_eth_dev_create(struct rte_vdev_device *vdev) free_args: failsafe_args_free(dev); free_subs: - fs_sub_device_free(dev); + rte_free(PRIV(dev)->subs); free_dev: /* mac_addrs must not be freed alone because part of dev_private */ dev->data->mac_addrs = NULL; @@ -301,20 +296,8 @@ fs_rte_eth_free(const char *name) dev = rte_eth_dev_allocated(name); if (dev == NULL) - return -ENODEV; - rte_eth_dev_callback_unregister(RTE_ETH_ALL, RTE_ETH_EVENT_NEW, - failsafe_eth_new_event_callback, dev); - ret = failsafe_eal_uninit(dev); - if (ret) - ERROR("Error while uninitializing sub-EAL"); - failsafe_args_free(dev); - fs_sub_device_free(dev); - ret = pthread_mutex_destroy(&PRIV(dev)->hotplug_mutex); - if (ret) - ERROR("Error while destroying hotplug mutex"); - rte_free(PRIV(dev)->mcast_addrs); - /* mac_addrs must not be freed alone because part of dev_private */ - dev->data->mac_addrs = NULL; + return 0; /* port already released */ + ret = failsafe_eth_dev_close(dev); rte_eth_dev_release_port(dev); return ret; } diff --git a/drivers/net/failsafe/failsafe_ops.c b/drivers/net/failsafe/failsafe_ops.c index 93ebd09114..fc8c11b28c 100644 --- a/drivers/net/failsafe/failsafe_ops.c +++ b/drivers/net/failsafe/failsafe_ops.c @@ -239,29 +239,6 @@ fs_dev_set_link_down(struct rte_eth_dev *dev) return 0; } -static void fs_dev_free_queues(struct rte_eth_dev *dev); -static int -fs_dev_close(struct rte_eth_dev *dev) -{ - struct sub_device *sdev; - uint8_t i; - - fs_lock(dev, 0); - failsafe_hotplug_alarm_cancel(dev); - if (PRIV(dev)->state == DEV_STARTED) - dev->dev_ops->dev_stop(dev); - PRIV(dev)->state = DEV_ACTIVE - 1; - FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) { - DEBUG("Closing sub_device %d", i); - failsafe_eth_dev_unregister_callbacks(sdev); - rte_eth_dev_close(PORT_ID(sdev)); - sdev->state = DEV_ACTIVE - 1; - } - fs_dev_free_queues(dev); - fs_unlock(dev, 0); - return 0; -} - static int fs_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id) { @@ -656,6 +633,42 @@ fs_dev_free_queues(struct rte_eth_dev *dev) dev->data->nb_tx_queues = 0; } +int +failsafe_eth_dev_close(struct rte_eth_dev *dev) +{ + struct sub_device *sdev; + uint8_t i; + int ret; + + fs_lock(dev, 0); + failsafe_hotplug_alarm_cancel(dev); + if (PRIV(dev)->state == DEV_STARTED) + dev->dev_ops->dev_stop(dev); + PRIV(dev)->state = DEV_ACTIVE - 1; + FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) { + DEBUG("Closing sub_device %d", i); + failsafe_eth_dev_unregister_callbacks(sdev); + rte_eth_dev_close(PORT_ID(sdev)); + sdev->state = DEV_ACTIVE - 1; + } + fs_dev_free_queues(dev); + rte_eth_dev_callback_unregister(RTE_ETH_ALL, RTE_ETH_EVENT_NEW, + failsafe_eth_new_event_callback, dev); + ret = failsafe_eal_uninit(dev); + if (ret) + ERROR("Error while uninitializing sub-EAL"); + failsafe_args_free(dev); + rte_free(PRIV(dev)->subs); + ret = pthread_mutex_destroy(&PRIV(dev)->hotplug_mutex); + if (ret) + ERROR("Error while destroying hotplug mutex"); + rte_free(PRIV(dev)->mcast_addrs); + /* mac_addrs must not be freed alone because part of dev_private */ + dev->data->mac_addrs = NULL; + fs_unlock(dev, 0); + return 0; +} + static int fs_promiscuous_enable(struct rte_eth_dev *dev) { @@ -1484,7 +1497,7 @@ const struct eth_dev_ops failsafe_ops = { .dev_stop = fs_dev_stop, .dev_set_link_down = fs_dev_set_link_down, .dev_set_link_up = fs_dev_set_link_up, - .dev_close = fs_dev_close, + .dev_close = failsafe_eth_dev_close, .promiscuous_enable = fs_promiscuous_enable, .promiscuous_disable = fs_promiscuous_disable, .allmulticast_enable = fs_allmulticast_enable, diff --git a/drivers/net/failsafe/failsafe_private.h b/drivers/net/failsafe/failsafe_private.h index 651578a128..6af0ef8471 100644 --- a/drivers/net/failsafe/failsafe_private.h +++ b/drivers/net/failsafe/failsafe_private.h @@ -236,6 +236,7 @@ int failsafe_eal_uninit(struct rte_eth_dev *dev); int failsafe_eth_dev_state_sync(struct rte_eth_dev *dev); void failsafe_eth_dev_unregister_callbacks(struct sub_device *sdev); +int failsafe_eth_dev_close(struct rte_eth_dev *dev); void failsafe_dev_remove(struct rte_eth_dev *dev); void failsafe_stats_increment(struct rte_eth_stats *to, struct rte_eth_stats *from); From patchwork Sun Sep 13 22:06:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 77559 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 55D2CA04C9; Mon, 14 Sep 2020 00:08:32 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 3BD821C112; Mon, 14 Sep 2020 00:08:04 +0200 (CEST) Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) by dpdk.org (Postfix) with ESMTP id 30A3E1C0CA for ; Mon, 14 Sep 2020 00:08:03 +0200 (CEST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id 0043C5D2; Sun, 13 Sep 2020 18:08:01 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 13 Sep 2020 18:08:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=uRdi7fueOWjb0 yfAQEbrfBfqbqiO2EGRuWWeo2qMplk=; b=suRDlVt0YautxXmuEp6okqbPTKO80 t/IbXYdmDLr7iPQa1Fx/ppH466Vo3heEl8JC61vGAFsgRZTtC5cWIXb/5m4K7BK1 5VQ1ObsxYK1ypGGsFERAgXDAeNEhyJdTY9+I/yE1mUle8me5giWjmffe9VcQCpTk A49AAVXeZQm3baojk/KG7GzUBkQnBMebSmopZ0l2YsQsZ3T6TOPrDWpt9PE1p16i aCJUaC1EL1Jgf0LMr1UbH1f/KJdbmClRhepFzPiS4g34I62dW8kLA5jgnsMot04i hA+Xy0Ug8UBbZK01HMBvllQqXEcw13TSLLg3F9W+G45BOiQ1vhltoRnPg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=uRdi7fueOWjb0yfAQEbrfBfqbqiO2EGRuWWeo2qMplk=; b=h78xQ38D wSLV7aNOFu7xzuK7NZ9wMDIOdCvVMeOaViGmJVcrPqMgebM2Qrqg0a4AceIR0rII F76bEndfRmmvX4y9eU2oJu7SrIHFdVd91HVjOFAvSPOUvOH+3HC5IlUgPwqb+nwI 6So3j+Eak1Ge0lI3Jr4niZaaJj1hqgoJ3cIfwmn9THZPeuXXza47NlVXWq8uHbpO fD4ortmVB4dXgmcbREm0kX31BB30LhjETsym3ckxm5i5jqgUYJlSeZRlJmdmtvyD UlVAe33oLw9RssqBsRlrEyj7X9J/qbK1xarG1y7Bm9dvT14UEd9oZ0ffqRlJnSva sO8mSp+EV+2VJA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeihedgtdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepvdehgfeivdejgedtveehfefhteelfefgieevgfffveefjeegtdfg uedthedtgeevnecukfhppeejjedrudefgedrvddtfedrudekgeenucevlhhushhtvghruf hiiigvpeeknecurfgrrhgrmhepmhgrihhlfhhrohhmpehthhhomhgrshesmhhonhhjrghl ohhnrdhnvght X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id 95F653064674; Sun, 13 Sep 2020 18:08:00 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, arybchenko@solarflare.com, Steve Yang , Jingjing Wu , Beilei Xing , Anatoly Burakov Date: Mon, 14 Sep 2020 00:06:59 +0200 Message-Id: <20200913220711.3768597-9-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200913220711.3768597-1-thomas@monjalon.net> References: <20200913220711.3768597-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 08/20] net/iavf: 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" From: Steve Yang The flag RTE_ETH_DEV_CLOSE_REMOVE is set so all port resources can be freed by rte_eth_dev_close(). Freeing of private port resources is moved from the ".remove(device)" to the ".dev_close(port)" operation. Signed-off-by: Steve Yang --- [Thomas] Note: freeing in secondary process is inconsistent between .dev_close and .remove operations. --- drivers/net/iavf/iavf_ethdev.c | 46 ++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c index 4860a94d4c..f7552f33db 100644 --- a/drivers/net/iavf/iavf_ethdev.c +++ b/drivers/net/iavf/iavf_ethdev.c @@ -1362,6 +1362,11 @@ iavf_dev_init(struct rte_eth_dev *eth_dev) adapter->eth_dev = eth_dev; adapter->stopped = 1; + /* Pass the information to the rte_eth_dev_close() that it should also + * release the private port resources. + */ + eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; + if (iavf_init_vf(eth_dev) != 0) { PMD_INIT_LOG(ERR, "Init vf failed"); return -1; @@ -1416,6 +1421,7 @@ iavf_dev_close(struct rte_eth_dev *dev) struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; struct iavf_adapter *adapter = IAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); + struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(dev->data->dev_private); iavf_dev_stop(dev); iavf_flow_flush(dev, NULL); @@ -1428,21 +1434,21 @@ iavf_dev_close(struct rte_eth_dev *dev) rte_intr_callback_unregister(intr_handle, iavf_dev_interrupt_handler, dev); iavf_disable_irq0(hw); - return 0; -} - -static int -iavf_dev_uninit(struct rte_eth_dev *dev) -{ - struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(dev->data->dev_private); - - if (rte_eal_process_type() != RTE_PROC_PRIMARY) - return -EPERM; dev->dev_ops = NULL; dev->rx_pkt_burst = NULL; dev->tx_pkt_burst = NULL; - iavf_dev_close(dev); + + if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_RSS_PF) { + if (vf->rss_lut) { + rte_free(vf->rss_lut); + vf->rss_lut = NULL; + } + if (vf->rss_key) { + rte_free(vf->rss_key); + vf->rss_key = NULL; + } + } rte_free(vf->vf_res); vf->vsi_res = NULL; @@ -1451,14 +1457,16 @@ iavf_dev_uninit(struct rte_eth_dev *dev) rte_free(vf->aq_resp); vf->aq_resp = NULL; - if (vf->rss_lut) { - rte_free(vf->rss_lut); - vf->rss_lut = NULL; - } - if (vf->rss_key) { - rte_free(vf->rss_key); - vf->rss_key = NULL; - } + return 0; +} + +static int +iavf_dev_uninit(struct rte_eth_dev *dev) +{ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -EPERM; + + iavf_dev_close(dev); return 0; } From patchwork Sun Sep 13 22:07:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 77560 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id A44AEA04C9; Mon, 14 Sep 2020 00:08:40 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 8F18A1C10F; Mon, 14 Sep 2020 00:08:06 +0200 (CEST) Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com [66.111.4.25]) by dpdk.org (Postfix) with ESMTP id 8C2901C11A for ; Mon, 14 Sep 2020 00:08:04 +0200 (CEST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id 3E3FC5C0143; Sun, 13 Sep 2020 18:08:04 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 13 Sep 2020 18:08:04 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=5cxgRRPYTImW9 uS5WE2n6jx+FpnspQToNrc1Zm3Ur7k=; b=MyXS9M7zivPh4SWj8Dg37IK3SLJCa bHjzqVtbST6Ayx9SrBANvSaVzYZtjQQ/IrsTN/2EJudsRC+G1i0NOu0B5GIoaq4z NCe7+4sl2SRTPkFQfGA3TXuA7kZW2Wn3CNkzl06R3TppjQ6ZB1hVe6u4k8OJdcIS DWsPajnPDkMt4N4A+QdtW9O4Ft50hMDWUFKixg5CvdT3A3TjOrHFg0t0rEwMFsgk ugJgyA8bzWAqOjwYTdzZIZA/vFkaFTs75ctO0nzLq3BqIiylCCM7FVQ5G8+Tu2Pc X4HhbgJlT0v0KBd0GRn/YIPaQXmCoAIHm4EP0GqGhgqOef/j75MuMRNDg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=5cxgRRPYTImW9uS5WE2n6jx+FpnspQToNrc1Zm3Ur7k=; b=KCGYBFMj LXI5WNChs0y98NClFAv0kplKuQCXJLCfacLg+L5UefNo310zx+gyKSms1+iLwCTs zHtgz3iHtyz4FR//6hgXzXq3JDHeS6rQ+kb924kAEsIfxnXXKgFxjLOn+Fx10ZVM yTU6ZIZg3zd57n74FCFSKA/37vyBaFxpnqDQhsYYFnoibl0Qtrsdev2pfAIyBF8Q yErvjJKedHtziqFBcXkUwf2oXy39OlhEnG3hDeRO4yq60i+5w2I38G2MIkfTKvaZ k9Dw3+E8nGsdBkvaW9f5hxaSegAGDN8bRSvml7MRjnbptZMnAkpiqoBNO5tdv3lG R6PlLhNYDYhqUw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeihedgtdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepvdehgfeivdejgedtveehfefhteelfefgieevgfffveefjeegtdfg uedthedtgeevnecukfhppeejjedrudefgedrvddtfedrudekgeenucevlhhushhtvghruf hiiigvpeeknecurfgrrhgrmhepmhgrihhlfhhrohhmpehthhhomhgrshesmhhonhhjrghl ohhnrdhnvght X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id 5439F3064674; Sun, 13 Sep 2020 18:08:03 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, arybchenko@solarflare.com, Matan Azrad , Shahaf Shuler Date: Mon, 14 Sep 2020 00:07:00 +0200 Message-Id: <20200913220711.3768597-10-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200913220711.3768597-1-thomas@monjalon.net> References: <20200913220711.3768597-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 09/20] net/mlx4: 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" The flag RTE_ETH_DEV_CLOSE_REMOVE is set so all port resources can be freed by rte_eth_dev_close(). Signed-off-by: Thomas Monjalon --- drivers/net/mlx4/mlx4.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index df59314b66..ad7c805d67 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -400,6 +400,8 @@ mlx4_dev_close(struct rte_eth_dev *dev) MLX4_ASSERT(priv->ctx == NULL); mlx4_intr_uninstall(priv); memset(priv, 0, sizeof(*priv)); + /* mac_addrs must not be freed because part of dev_private */ + dev->data->mac_addrs = NULL; return 0; } @@ -1025,6 +1027,7 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) ERROR("can not allocate rte ethdev"); goto port_error; } + eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; eth_dev->data->dev_private = priv; eth_dev->data->mac_addrs = priv->mac; eth_dev->device = &pci_dev->device; From patchwork Sun Sep 13 22:07:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 77561 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 79AB9A04C9; Mon, 14 Sep 2020 00:08:49 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D4EF21C116; Mon, 14 Sep 2020 00:08:09 +0200 (CEST) Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) by dpdk.org (Postfix) with ESMTP id AB5BB1C11D for ; Mon, 14 Sep 2020 00:08:07 +0200 (CEST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id 9D6185D2; Sun, 13 Sep 2020 18:08:06 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 13 Sep 2020 18:08:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=ngOvjHWl0cH2V l3dYbPTd3FqULeOyMbziGqJ6T5/fww=; b=JI4/GVkjkI6RmHJ2P4GhH9YJ3zH2/ u3VPhpnnXL5y/+Jx257O+adJVCX+x8InQjEwzHpsz6zQm/4Xv7cWb9JTYQjAscn6 pRrYtQUmS56YiZGXhr1rFMOD56qcJ5d+K093MGLg6H7ChSGgbjbhu9VmarsXMMk0 HLd/HG14AcsTamKaAzuRrMNjuGiuUYHLlj7hq+YeTtwQatPRfQ7haS0YqRSXGVGN 2OHZeh60I8ofkCaZsrJx+3ZSXyjwELRsWSRaIBFghLV/lQCXmJiQm51gS4S4Ap9P RJ+uNdoklc9dWRuFfdv4/JBz/bMAjkIacMAyvaGVHemhmL2oz4a1G0shA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=ngOvjHWl0cH2Vl3dYbPTd3FqULeOyMbziGqJ6T5/fww=; b=OQpneZp3 QIuQeerBcFQRqUv5HiWUfZIAzgWVrTaaPwcpmAXpzJNUDod8rGv7fp273D0jFXZi C38m1jha6VXWPvynloeGkHRON/WC6QS2+/oFrirOkXA3QN3TVp0CYYlNF5nKFFuj u9UXQMD04uQzkxFbdUDF9hZ1sG7s2Heuq8t7kzbKYSmIVLS3E6/ruU/6m+PlrzJE 8Vn0HUdCzeMf2hJd+SijIPwZ6dqkH4PH15DO3FiAFXFj4CztDvp+IHP3pCRXW0hN hiKH3Ib9vP/VamTfbda5c1ol0XnS18HGSpsynLDtWkgl+exDAIb4JzxBXYPRHDHV XdvT22osbaAu1g== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeihedgtdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepvdehgfeivdejgedtveehfefhteelfefgieevgfffveefjeegtdfg uedthedtgeevnecukfhppeejjedrudefgedrvddtfedrudekgeenucevlhhushhtvghruf hiiigvpedutdenucfrrghrrghmpehmrghilhhfrhhomhepthhhohhmrghssehmohhnjhgr lhhonhdrnhgvth X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id 6940E306467D; Sun, 13 Sep 2020 18:08:05 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, arybchenko@solarflare.com, Tetsuya Mukawa , Anatoly Burakov Date: Mon, 14 Sep 2020 00:07:01 +0200 Message-Id: <20200913220711.3768597-11-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200913220711.3768597-1-thomas@monjalon.net> References: <20200913220711.3768597-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 10/20] net/null: 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" The flag RTE_ETH_DEV_CLOSE_REMOVE is set so all port resources can be freed by rte_eth_dev_close(). Signed-off-by: Thomas Monjalon --- drivers/net/null/rte_eth_null.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/drivers/net/null/rte_eth_null.c b/drivers/net/null/rte_eth_null.c index 0ce073fa4b..33997013e4 100644 --- a/drivers/net/null/rte_eth_null.c +++ b/drivers/net/null/rte_eth_null.c @@ -458,7 +458,20 @@ eth_mac_address_set(__rte_unused struct rte_eth_dev *dev, return 0; } +static int +eth_dev_close(struct rte_eth_dev *dev) +{ + PMD_LOG(INFO, "Closing null ethdev on NUMA socket %u", + rte_socket_id()); + + /* mac_addrs must not be freed alone because part of dev_private */ + dev->data->mac_addrs = NULL; + + return 0; +} + static const struct eth_dev_ops ops = { + .dev_close = eth_dev_close, .dev_start = eth_dev_start, .dev_stop = eth_dev_stop, .dev_configure = eth_dev_configure, @@ -532,6 +545,7 @@ eth_dev_null_create(struct rte_vdev_device *dev, struct pmd_options *args) data->mac_addrs = &internals->eth_addr; data->promiscuous = 1; data->all_multicast = 1; + data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; eth_dev->dev_ops = &ops; @@ -701,18 +715,12 @@ rte_pmd_null_remove(struct rte_vdev_device *dev) if (!dev) return -EINVAL; - PMD_LOG(INFO, "Closing null ethdev on numa socket %u", - rte_socket_id()); - /* find the ethdev entry */ eth_dev = rte_eth_dev_allocated(rte_vdev_device_name(dev)); if (eth_dev == NULL) - return -1; - - if (rte_eal_process_type() == RTE_PROC_PRIMARY) - /* mac_addrs must not be freed alone because part of dev_private */ - eth_dev->data->mac_addrs = NULL; + return 0; /* port already released */ + eth_dev_close(eth_dev); rte_eth_dev_release_port(eth_dev); return 0; From patchwork Sun Sep 13 22:07:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 77562 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2DC14A04C9; Mon, 14 Sep 2020 00:08:58 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 129BE1C125; Mon, 14 Sep 2020 00:08:11 +0200 (CEST) Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) by dpdk.org (Postfix) with ESMTP id 9A7391DB9 for ; Mon, 14 Sep 2020 00:08:09 +0200 (CEST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id 98E925DD; Sun, 13 Sep 2020 18:08:08 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 13 Sep 2020 18:08:08 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=Toz+q5WaYVMN8 MT0flLxr4V+w+QW+RBadHcX1qF5dVM=; b=fvQ8cCJbC1lNlDkuJOvjlxhoEjrGJ BoRVZNnEPc3JGDvxYG7qRsvQfL//XtPrl7QLkdb3cQK7ooYSrbNN+Iw693jsH0la 2IcHoul327YRcQv0hIEh5x7O9Px7Lg/rQUDQ1d2kDouhCU7KYXWF5234YXa16Ovf Mbgeq+9HATjkIBxdLGfSbS48RE0XBXYc890B6xDEiA3nTAsd0Rg0yK6hoGAEG4If dzUQeD53Us6kOcyUSpgA26TtT55v/nA4eJrPBypSEIx8AGeI3hXeilBh/QkJ5jrL ubg5iFYGgMa5k+2N/sVhCX5A383BI6U6Xc4447dYdDTAGhHQ1fL/Amr7A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=Toz+q5WaYVMN8MT0flLxr4V+w+QW+RBadHcX1qF5dVM=; b=ZEjyeVqU 1XPu7y5imLV2pKuNCTyCgorv6M1J+44N43y37i1IBBXRXiVM/ZXILDFNF3yoYWus 2qsa1DW9nguLojSgCG+To3k4QHarTD1aiuz2XkKCcLk9UlfuDha5eGQvMYa+jpI2 iYEzY+dH9aB/PPPbA89zhiJH5ZFBH8rTK6cRTrO/jsgtrqYMcCJNMhVXbTxqYz/h mCZxvdbd1KSh1gGb2TpShBLfD7tTBL3xbW6NMBpubm3hnX6IqfWe60153NoUxs5Z Qkg2PFLjfvjglgkdT+wPkH8hiK+/OG6AGbFVlE/oMMN4fQxRx7aehIc2+OSRDl3H 5gKqL8SaShe8Aw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeihedgtdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepvdehgfeivdejgedtveehfefhteelfefgieevgfffveefjeegtdfg uedthedtgeevnecukfhppeejjedrudefgedrvddtfedrudekgeenucevlhhushhtvghruf hiiigvpedutdenucfrrghrrghmpehmrghilhhfrhhomhepthhhohhmrghssehmohhnjhgr lhhonhdrnhgvth X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id 7BE533064674; Sun, 13 Sep 2020 18:08:07 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, arybchenko@solarflare.com, Harman Kalra Date: Mon, 14 Sep 2020 00:07:02 +0200 Message-Id: <20200913220711.3768597-12-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200913220711.3768597-1-thomas@monjalon.net> References: <20200913220711.3768597-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 11/20] net/octeontx: 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" The flag RTE_ETH_DEV_CLOSE_REMOVE is set so all port resources can be freed by rte_eth_dev_close(). The callback ".dev_close(port)" is called also from the ".remove(device)" operation. Signed-off-by: Thomas Monjalon --- drivers/net/octeontx/octeontx_ethdev.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/drivers/net/octeontx/octeontx_ethdev.c b/drivers/net/octeontx/octeontx_ethdev.c index 946844ca0b..6713c51504 100644 --- a/drivers/net/octeontx/octeontx_ethdev.c +++ b/drivers/net/octeontx/octeontx_ethdev.c @@ -509,10 +509,6 @@ octeontx_dev_close(struct rte_eth_dev *dev) rte_free(txq); } - /* Free MAC address table */ - rte_free(dev->data->mac_addrs); - dev->data->mac_addrs = NULL; - octeontx_port_close(nic); dev->tx_pkt_burst = NULL; @@ -1379,6 +1375,7 @@ octeontx_create(struct rte_vdev_device *dev, int port, uint8_t evdev, data->promiscuous = 0; data->all_multicast = 0; data->scattered_rx = 0; + data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; /* Get maximum number of supported MAC entries */ max_entries = octeontx_bgx_port_mac_entries_get(nic->port_id); @@ -1466,10 +1463,9 @@ octeontx_remove(struct rte_vdev_device *dev) for (i = 0; i < OCTEONTX_VDEV_DEFAULT_MAX_NR_PORT; i++) { sprintf(octtx_name, "eth_octeontx_%d", i); - /* reserve an ethdev entry */ eth_dev = rte_eth_dev_allocated(octtx_name); if (eth_dev == NULL) - return -ENODEV; + continue; /* port already released */ if (rte_eal_process_type() != RTE_PROC_PRIMARY) { rte_eth_dev_release_port(eth_dev); @@ -1479,9 +1475,8 @@ octeontx_remove(struct rte_vdev_device *dev) nic = octeontx_pmd_priv(eth_dev); rte_event_dev_stop(nic->evdev); PMD_INIT_LOG(INFO, "Closing octeontx device %s", octtx_name); - + octeontx_dev_close(eth_dev); rte_eth_dev_release_port(eth_dev); - rte_event_dev_close(nic->evdev); } if (rte_eal_process_type() != RTE_PROC_PRIMARY) From patchwork Sun Sep 13 22:07:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 77563 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3F66FA04C9; Mon, 14 Sep 2020 00:09:09 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9D5C61BE81; Mon, 14 Sep 2020 00:08:21 +0200 (CEST) Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) by dpdk.org (Postfix) with ESMTP id 9BD592C52 for ; Mon, 14 Sep 2020 00:08:20 +0200 (CEST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id 9B2AD5E2; Sun, 13 Sep 2020 18:08:19 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 13 Sep 2020 18:08:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=6/hE6eJbweWmL LY195w3fUApOT5EDkL5gWPO0g/wGhg=; b=AdCEWQEabDIZElFXHxPCcYbMv8fmc Nb0cKQGKSha7RDppMxjAslJlX/ULzgLBre4yl03KJ0gRefgbkQXWuXEdARgD6uJo Xxxl1TdtAh4w1ARlk/XFvUyLEsTsQG3Cd+/G8zLQUjT5aJzupikRjfS3Kg7aTr5b B/fvfUtvmxGsBvehnWW2zGPpvk5C+UVYBg8eELPpQJrjrrjgMx68Oo3y9BIyK7Se FXRbMOv8Kazawg/sAsFuQ0uc5jMNggZC2uMbfT5iZq+/ceUuaVASrLNw/vBLHoLP C+eQjwM7lTMEniGrg0J80BoOs/1xFZ5hsPJxHCIrhmQxnU6Pm1ZB8vEBg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=6/hE6eJbweWmLLY195w3fUApOT5EDkL5gWPO0g/wGhg=; b=K1UP6gVJ Rr7YC+fsU2ws5/HwKAqzEFSrRwGCbgWStI/Pws58fbjrt+1OY1LTJ5/Ca3aflfoi DCmtgNy6b5Y3K7hjvqi7+7Slfad6M5AFTkrrhOij4c8BAwpwdNvIv2XAG5oZlSZk TRDrJdXb7x2xFSPqvizMY3NmGf3PyQmGKh9VWTJIDqmXU4x7q1PogE79oX56XXU9 yh47dW4Wg8v3oZxkFjc4jvzZhEp3kvDdlb81ZMfVoRNVWx8i8MWRgCJ1Hr8kxhzG nmE7UEmLg3yqyGh0B/xDWA2rFMztcdJl4kWI75X34e+9oykWBN7OaTdOwmZDSqVz 30iyWGs50e9lGQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeihedgtdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepvdehgfeivdejgedtveehfefhteelfefgieevgfffveefjeegtdfg uedthedtgeevnecukfhppeejjedrudefgedrvddtfedrudekgeenucevlhhushhtvghruf hiiigvpeduvdenucfrrghrrghmpehmrghilhhfrhhomhepthhhohhmrghssehmohhnjhgr lhhonhdrnhgvth X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id 84C8A306468B; Sun, 13 Sep 2020 18:08:18 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, arybchenko@solarflare.com, Anatoly Burakov Date: Mon, 14 Sep 2020 00:07:03 +0200 Message-Id: <20200913220711.3768597-13-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200913220711.3768597-1-thomas@monjalon.net> References: <20200913220711.3768597-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 12/20] net/pcap: 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" The flag RTE_ETH_DEV_CLOSE_REMOVE is set so all port resources can be freed by rte_eth_dev_close(). Freeing of private port resources is moved from the ".remove(device)" to the ".dev_close(port)" operation. Signed-off-by: Thomas Monjalon --- drivers/net/pcap/rte_eth_pcap.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c index 76e704a65a..a946fa9a1a 100644 --- a/drivers/net/pcap/rte_eth_pcap.c +++ b/drivers/net/pcap/rte_eth_pcap.c @@ -734,6 +734,12 @@ eth_dev_close(struct rte_eth_dev *dev) unsigned int i; struct pmd_internals *internals = dev->data->dev_private; + if (internals == NULL) + return 0; + + PMD_LOG(INFO, "Closing pcap ethdev on NUMA socket %d", + rte_socket_id()); + /* Device wide flag, but cleanup must be performed per queue. */ if (internals->infinite_rx) { for (i = 0; i < dev->data->nb_rx_queues; i++) { @@ -748,6 +754,12 @@ eth_dev_close(struct rte_eth_dev *dev) } } + rte_free(dev->process_private); + + if (internals->phy_mac == 0) + /* not dynamically allocated, must not be freed */ + dev->data->mac_addrs = NULL; + return 0; } @@ -1322,6 +1334,7 @@ eth_from_pcaps(struct rte_vdev_device *vdev, else eth_dev->tx_pkt_burst = eth_tx_drop; + eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; rte_eth_dev_probing_finish(eth_dev); return 0; } @@ -1544,30 +1557,16 @@ pmd_pcap_probe(struct rte_vdev_device *dev) static int pmd_pcap_remove(struct rte_vdev_device *dev) { - struct pmd_internals *internals = NULL; struct rte_eth_dev *eth_dev = NULL; - PMD_LOG(INFO, "Closing pcap ethdev on numa socket %d", - rte_socket_id()); - if (!dev) return -1; - /* reserve an ethdev entry */ eth_dev = rte_eth_dev_allocated(rte_vdev_device_name(dev)); if (eth_dev == NULL) - return -1; - - if (rte_eal_process_type() == RTE_PROC_PRIMARY) { - internals = eth_dev->data->dev_private; - if (internals != NULL && internals->phy_mac == 0) - /* not dynamically allocated, must not be freed */ - eth_dev->data->mac_addrs = NULL; - } + return 0; /* port already released */ eth_dev_close(eth_dev); - - rte_free(eth_dev->process_private); rte_eth_dev_release_port(eth_dev); return 0; From patchwork Sun Sep 13 22:07:04 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 77564 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9BBB0A04C9; Mon, 14 Sep 2020 00:09:17 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id CE52B1C08C; Mon, 14 Sep 2020 00:08:26 +0200 (CEST) Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) by dpdk.org (Postfix) with ESMTP id B3A861C08C for ; Mon, 14 Sep 2020 00:08:25 +0200 (CEST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id B5A1E5D6; Sun, 13 Sep 2020 18:08:24 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 13 Sep 2020 18:08:25 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=MjRVH+zMO1fmr iDmMbsnNw7aKalKLCg8sQuqg30b0+w=; b=C3lwpIOaPEepH1AKuhFQHVlrmre89 V78ROjXOT/P1qi5J7aA8wQwTAsWKLZlxSGmvMcquxqnR+f2hwZR8P/uHzS/rWa7Y IgMyGOrQ+rYGoYsu+SXa/nxEfnB2yog4rX9DGV7FiFywRz4SaN+hKHa8sYL0+MPh JebJOJWyddeqgDO/1aMu1Sw3wURD83QioqOx8JpFyjHmuIRqUaYi/sMhMbsKzXb5 u5sb5n4N98FdNYLKgAIbSIljc7czxFmQGTDNynqV708E8qCtUfuBArXBLHY49K1f 0QGVtf9FmQOU/cRqjrKY1gEWnlqODMLpwSpNiwMm3T8VahUyIC5iH0ZLg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=MjRVH+zMO1fmriDmMbsnNw7aKalKLCg8sQuqg30b0+w=; b=AEnsCtd1 6JlThXXc/rEco7wDA0LyiImfeA0OBVLI520tBKzjLi7myJbIpKi5EhYzhL7+41HM Ypk8420AEh289PgNfklCbwVc5Zvz0ls90dX/B/Sa1oTv/ZbStqACPkju+tzvOZkd qbyLAd3NXIcX1pxMGRRAHBIWbMXwO/G4stmOtf/6O67UdxFzLNXXoojfGtqA/Ja5 CN48AGSoTcurdF4rEyyhadMeiiC9ZXSmcyzRxRPfyoWqt9NXVcoXKF/TctrgLpOF 1jLTAoCTr2mLo8iVjIVsaM/ouwOKd54X2mj5RL6cc88ywFJcE9ceQh3uyk5BS2hr 4UsFxA16Vz8ZIg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeihedgtdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepvdehgfeivdejgedtveehfefhteelfefgieevgfffveefjeegtdfg uedthedtgeevnecukfhppeejjedrudefgedrvddtfedrudekgeenucevlhhushhtvghruf hiiigvpedufeenucfrrghrrghmpehmrghilhhfrhhomhepthhhohhmrghssehmohhnjhgr lhhonhdrnhgvth X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id 92FFB3064674; Sun, 13 Sep 2020 18:08:23 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, arybchenko@solarflare.com, Bruce Richardson Date: Mon, 14 Sep 2020 00:07:04 +0200 Message-Id: <20200913220711.3768597-14-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200913220711.3768597-1-thomas@monjalon.net> References: <20200913220711.3768597-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 13/20] net/ring: 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" The flag RTE_ETH_DEV_CLOSE_REMOVE is set so all port resources can be freed by rte_eth_dev_close(). Freeing of private port resources is moved from the ".remove(device)" to the ".dev_close(port)" operation. Signed-off-by: Thomas Monjalon Acked-by: Bruce Richardson --- drivers/net/ring/rte_eth_ring.c | 51 ++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/drivers/net/ring/rte_eth_ring.c b/drivers/net/ring/rte_eth_ring.c index 733c898259..afe3ec46cc 100644 --- a/drivers/net/ring/rte_eth_ring.c +++ b/drivers/net/ring/rte_eth_ring.c @@ -226,7 +226,35 @@ static int eth_link_update(struct rte_eth_dev *dev __rte_unused, int wait_to_complete __rte_unused) { return 0; } +static int +eth_dev_close(struct rte_eth_dev *dev) +{ + struct pmd_internals *internals = NULL; + struct ring_queue *r = NULL; + uint16_t i; + + eth_dev_stop(dev); + + internals = dev->data->dev_private; + if (internals->action == DEV_CREATE) { + /* + * it is only necessary to delete the rings in rx_queues because + * they are the same used in tx_queues + */ + for (i = 0; i < dev->data->nb_rx_queues; i++) { + r = dev->data->rx_queues[i]; + rte_ring_free(r->rng); + } + } + + /* mac_addrs must not be freed alone because part of dev_private */ + dev->data->mac_addrs = NULL; + + return 0; +} + static const struct eth_dev_ops ops = { + .dev_close = eth_dev_close, .dev_start = eth_dev_start, .dev_stop = eth_dev_stop, .dev_set_link_up = eth_dev_set_link_up, @@ -328,6 +356,7 @@ do_eth_dev_ring_create(const char *name, eth_dev->dev_ops = &ops; data->kdrv = RTE_KDRV_NONE; data->numa_node = numa_node; + data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; /* finally assign rx and tx ops */ eth_dev->rx_pkt_burst = eth_ring_rx; @@ -659,9 +688,6 @@ rte_pmd_ring_remove(struct rte_vdev_device *dev) { const char *name = rte_vdev_device_name(dev); struct rte_eth_dev *eth_dev = NULL; - struct pmd_internals *internals = NULL; - struct ring_queue *r = NULL; - uint16_t i; PMD_LOG(INFO, "Un-Initializing pmd_ring for %s", name); @@ -671,24 +697,9 @@ rte_pmd_ring_remove(struct rte_vdev_device *dev) /* find an ethdev entry */ eth_dev = rte_eth_dev_allocated(name); if (eth_dev == NULL) - return -ENODEV; + return 0; /* port already released */ - eth_dev_stop(eth_dev); - - internals = eth_dev->data->dev_private; - if (internals->action == DEV_CREATE) { - /* - * it is only necessary to delete the rings in rx_queues because - * they are the same used in tx_queues - */ - for (i = 0; i < eth_dev->data->nb_rx_queues; i++) { - r = eth_dev->data->rx_queues[i]; - rte_ring_free(r->rng); - } - } - - /* mac_addrs must not be freed alone because part of dev_private */ - eth_dev->data->mac_addrs = NULL; + eth_dev_close(eth_dev); rte_eth_dev_release_port(eth_dev); return 0; } From patchwork Sun Sep 13 22:07:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 77565 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5DB25A04C9; Mon, 14 Sep 2020 00:09:26 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 2011F1C0B9; Mon, 14 Sep 2020 00:08:30 +0200 (CEST) Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) by dpdk.org (Postfix) with ESMTP id 86AA51C12A for ; Mon, 14 Sep 2020 00:08:28 +0200 (CEST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id 7098E4A2; Sun, 13 Sep 2020 18:08:27 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 13 Sep 2020 18:08:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=GKH9ZceWtvxkJ v7aVTxzAETGsGNLGvPSWHnufabDmZI=; b=jmVn0ra5ooH0wZxpC/OYuZxK2no3U 2Y7+RVyNE6v5t+QraMLDVvF8ZdI7tyOA5g5ByLvslALjEgvgxsd0+P3pna2aQFSE aP02U5THUrJpYRVwSGIq+Z2z95VR5R/YjRqUZWypnJoIaiaEBUYe2Y87Sm9blk8U 6p6eykJLZFN7g20a5ffodPlY3bvPIjBqK8Iva0626CjElJOuRzwRBgjiwaKfDLDA lzF6zps9DOvcEmL/ZFTLjVxVFPqflTxD+Y4n5UP/55aG+3qCLNOzQhqqUO6yN135 ZmZVf6FZ1RSfsoni4RvgiFf5MSln5pXD6dajY5i5HuZgqnP5MYGg9ad4A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=GKH9ZceWtvxkJv7aVTxzAETGsGNLGvPSWHnufabDmZI=; b=PjAZRJNl kYCkHkfi2eB0vqlOb+/Lmovzar29wuTT/KLFaOqgNYVlQtkGQhCYl3PLuKDkOt2z o8MvjklYDt86WhAzKtewgospxZQwuiut6AVGFj7lFCvWPuUVUyTuTnaF7KFv/Mt4 JxvX1UrJztBMXf8sSUi8WtVZiDZzbBNlgvOXBJSzl6tTtqxgRQHe7GblnJFf9hEV kVhP/Fd4iSVSlVtSlfPT/QRoA6e0PuWreQfqutOpcZsn8MTkCuYu8eeNsP4HK/P6 lg9WJFBKIvu4lp2kPKinWS/iiVu6XG/Z0m6JRd9MQszv0OgffnxOc64xXn9eu5C6 3VfanOwbObPc1w== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeihedgtdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepvdehgfeivdejgedtveehfefhteelfefgieevgfffveefjeegtdfg uedthedtgeevnecukfhppeejjedrudefgedrvddtfedrudekgeenucevlhhushhtvghruf hiiigvpedufeenucfrrghrrghmpehmrghilhhfrhhomhepthhhohhmrghssehmohhnjhgr lhhonhdrnhgvth X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id 36A3C3064674; Sun, 13 Sep 2020 18:08:26 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, arybchenko@solarflare.com, Jasvinder Singh , Cristian Dumitrescu Date: Mon, 14 Sep 2020 00:07:05 +0200 Message-Id: <20200913220711.3768597-15-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200913220711.3768597-1-thomas@monjalon.net> References: <20200913220711.3768597-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 14/20] net/softnic: 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" The flag RTE_ETH_DEV_CLOSE_REMOVE is set so all port resources can be freed by rte_eth_dev_close(). Freeing of private port resources is moved from the ".remove(device)" to the ".dev_close(port)" operation. Signed-off-by: Thomas Monjalon Acked-by: Cristian Dumitrescu --- drivers/net/softnic/rte_eth_softnic.c | 63 ++++++++++++++------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/drivers/net/softnic/rte_eth_softnic.c b/drivers/net/softnic/rte_eth_softnic.c index 491a308c11..5b94e250d8 100644 --- a/drivers/net/softnic/rte_eth_softnic.c +++ b/drivers/net/softnic/rte_eth_softnic.c @@ -201,9 +201,37 @@ pmd_dev_stop(struct rte_eth_dev *dev) softnic_mtr_free(p); } +static void +pmd_free(struct pmd_internals *p) +{ + if (p == NULL) + return; + + if (p->params.conn_port) + softnic_conn_free(p->conn); + + softnic_thread_free(p); + softnic_pipeline_free(p); + softnic_table_action_profile_free(p); + softnic_port_in_action_profile_free(p); + softnic_tap_free(p); + softnic_tmgr_free(p); + softnic_link_free(p); + softnic_swq_free(p); + softnic_mempool_free(p); + + tm_hierarchy_free(p); + softnic_mtr_free(p); + + rte_free(p); +} + static int -pmd_dev_close(struct rte_eth_dev *dev __rte_unused) +pmd_dev_close(struct rte_eth_dev *dev) { + pmd_free(dev->data->dev_private); + dev->data->dev_private = NULL; /* already freed */ + dev->data->mac_addrs = NULL; /* statically allocated */ return 0; } @@ -335,31 +363,6 @@ pmd_init(struct pmd_params *params) return p; } -static void -pmd_free(struct pmd_internals *p) -{ - if (p == NULL) - return; - - if (p->params.conn_port) - softnic_conn_free(p->conn); - - softnic_thread_free(p); - softnic_pipeline_free(p); - softnic_table_action_profile_free(p); - softnic_port_in_action_profile_free(p); - softnic_tap_free(p); - softnic_tmgr_free(p); - softnic_link_free(p); - softnic_swq_free(p); - softnic_mempool_free(p); - - tm_hierarchy_free(p); - softnic_mtr_free(p); - - rte_free(p); -} - static struct rte_ether_addr eth_addr = { .addr_bytes = {0}, }; @@ -384,6 +387,7 @@ pmd_ethdev_register(struct rte_vdev_device *vdev, dev->device = &vdev->device; /* dev->data */ + dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; dev->data->dev_private = dev_private; dev->data->dev_link.link_speed = ETH_SPEED_NUM_100G; dev->data->dev_link.link_duplex = ETH_LINK_FULL_DUPLEX; @@ -653,12 +657,9 @@ pmd_remove(struct rte_vdev_device *vdev) /* Find the ethdev entry */ dev = rte_eth_dev_allocated(rte_vdev_device_name(vdev)); if (dev == NULL) - return -ENODEV; + return 0; /* port already released */ - /* Free device data structures*/ - pmd_free(dev->data->dev_private); - dev->data->dev_private = NULL; /* already freed */ - dev->data->mac_addrs = NULL; /* statically allocated */ + pmd_dev_close(dev); rte_eth_dev_release_port(dev); return 0; From patchwork Sun Sep 13 22:07:06 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 77566 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2060BA04C9; Mon, 14 Sep 2020 00:09:35 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 3A84A1C115; Mon, 14 Sep 2020 00:08:36 +0200 (CEST) Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) by dpdk.org (Postfix) with ESMTP id 29F091C01E for ; Mon, 14 Sep 2020 00:08:35 +0200 (CEST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id 14D035D6; Sun, 13 Sep 2020 18:08:34 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 13 Sep 2020 18:08:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=669nX+VkN1CM6 97WtFyvA8We9KKCt/COzSMrNsGnHtU=; b=fz1QhLpwWK2kUrm02pjRknaOnG8TZ KG6XTvM3pGrgfBexBWNITVg4c2iHg8+hb0TQPoSkH+Kk3MUutm90CW7pB03sAyp0 wvolpoeyFLb6ybpxNrEPr0Pkx0gHYHQwUgx/KmywcrivL7Dw6+sFTa0QfHLfXFzK upMSjki1STPkXYmuk+rOdMjLe7oa3PA+e6erRkjRq4ho9c5oaOVSjAXcVUSv9qVt jcKYrFGgv64vlCKLbKx0LRGC/K/6TsAUrl7gPWLW1gumtU9Y3nX8Nu+wouIc/bIq PnjHaU1p6BWTbaUirXyQK2FfhRXLTtZ/7TA+qf+3FR7ogVQSfbpIdrNOw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=669nX+VkN1CM697WtFyvA8We9KKCt/COzSMrNsGnHtU=; b=EBbJge5Q JagOScs0UZi58xZw06gOBT+ntMC8k/AE/FB/tT25JOzSnhfT86XNF+scFUcMV06d aHhvBsTLlZqq0hgolKsN3aABqEz2ksTdLQOBMXTlubXvmV/FJnMdb3uvjiufTlt5 zkaX7+MlnhPmTU+wym06K3zTf0bQ67iQ1EdMi8adR7Q4lcr4FgU6T/1vBMQLxd0c 87bozV6NgzpE3retyOdJI+u4MxAL5Je/ZTa6DTA3ncBIuezpRwv1QyC51NgxnhU0 SC2i0fnsXlOl2ZQ4AfJiyxT+A9C/pibQja5HfiYQiVA0kmEBX3viHiHRQmLiH4bR 7wYjbF9Zi6kR4w== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeihedgtdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepvdehgfeivdejgedtveehfefhteelfefgieevgfffveefjeegtdfg uedthedtgeevnecukfhppeejjedrudefgedrvddtfedrudekgeenucevlhhushhtvghruf hiiigvpeduheenucfrrghrrghmpehmrghilhhfrhhomhepthhhohhmrghssehmohhnjhgr lhhonhdrnhgvth X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id D21E93064685; Sun, 13 Sep 2020 18:08:32 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, arybchenko@solarflare.com, Yunjian Wang , Keith Wiles Date: Mon, 14 Sep 2020 00:07:06 +0200 Message-Id: <20200913220711.3768597-16-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200913220711.3768597-1-thomas@monjalon.net> References: <20200913220711.3768597-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 15/20] net/tap: 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" From: Yunjian Wang The flag RTE_ETH_DEV_CLOSE_REMOVE is set so all port resources can be freed by rte_eth_dev_close(). Freeing of private port resources is moved from the ".remove(device)" to the ".dev_close(port)" operation. Signed-off-by: Yunjian Wang --- [Thomas] Note: freeing in secondary process is inconsistent between .dev_close and .remove operations. --- drivers/net/tap/rte_eth_tap.c | 46 ++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c index 6bce90c531..2e325f55aa 100644 --- a/drivers/net/tap/rte_eth_tap.c +++ b/drivers/net/tap/rte_eth_tap.c @@ -72,6 +72,10 @@ static int tap_devices_count; +static const char *tuntap_types[ETH_TUNTAP_TYPE_MAX] = { + "UNKNOWN", "TUN", "TAP" +}; + static const char *valid_arguments[] = { ETH_TAP_IFACE_ARG, ETH_TAP_REMOTE_ARG, @@ -1040,6 +1044,9 @@ tap_dev_close(struct rte_eth_dev *dev) struct pmd_process_private *process_private = dev->process_private; struct rx_queue *rxq; + if (process_private == NULL) + return 0; + tap_link_set_down(dev); if (internals->nlsk_fd != -1) { tap_flow_flush(dev, NULL); @@ -1079,6 +1086,23 @@ tap_dev_close(struct rte_eth_dev *dev) * it will be removed from kernel */ + /* mac_addrs must not be freed alone because part of dev_private */ + dev->data->mac_addrs = NULL; + + internals = dev->data->dev_private; + TAP_LOG(DEBUG, "Closing %s Ethernet device on NUMA %u", + tuntap_types[internals->type], rte_socket_id()); + + if (internals->ioctl_sock != -1) { + close(internals->ioctl_sock); + internals->ioctl_sock = -1; + } + rte_free(dev->process_private); + dev->process_private = NULL; + if (tap_devices_count == 1) + rte_mp_action_unregister(TAP_MP_KEY); + tap_devices_count--; + return 0; } @@ -1802,10 +1826,6 @@ static const struct eth_dev_ops ops = { .filter_ctrl = tap_dev_filter_ctrl, }; -static const char *tuntap_types[ETH_TUNTAP_TYPE_MAX] = { - "UNKNOWN", "TUN", "TAP" -}; - static int eth_dev_tap_create(struct rte_vdev_device *vdev, const char *tap_name, char *remote_iface, struct rte_ether_addr *mac_addr, @@ -1856,7 +1876,7 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, const char *tap_name, /* Setup some default values */ data = dev->data; data->dev_private = pmd; - data->dev_flags = RTE_ETH_DEV_INTR_LSC; + data->dev_flags = RTE_ETH_DEV_INTR_LSC | RTE_ETH_DEV_CLOSE_REMOVE; data->numa_node = numa_node; data->dev_link = pmd_link; @@ -2448,30 +2468,16 @@ static int rte_pmd_tap_remove(struct rte_vdev_device *dev) { struct rte_eth_dev *eth_dev = NULL; - struct pmd_internals *internals; /* find the ethdev entry */ eth_dev = rte_eth_dev_allocated(rte_vdev_device_name(dev)); if (!eth_dev) - return -ENODEV; - - /* mac_addrs must not be freed alone because part of dev_private */ - eth_dev->data->mac_addrs = NULL; + return 0; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return rte_eth_dev_release_port(eth_dev); tap_dev_close(eth_dev); - - internals = eth_dev->data->dev_private; - TAP_LOG(DEBUG, "Closing %s Ethernet device on numa %u", - tuntap_types[internals->type], rte_socket_id()); - - close(internals->ioctl_sock); - rte_free(eth_dev->process_private); - if (tap_devices_count == 1) - rte_mp_action_unregister(TAP_MP_KEY); - tap_devices_count--; rte_eth_dev_release_port(eth_dev); return 0; From patchwork Sun Sep 13 22:07:07 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 77572 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id CB9AFA04C9; Mon, 14 Sep 2020 00:10:38 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id EF52E1C11E; Mon, 14 Sep 2020 00:10:21 +0200 (CEST) Received: from new4-smtp.messagingengine.com (new4-smtp.messagingengine.com [66.111.4.230]) by dpdk.org (Postfix) with ESMTP id 334DA1BE83 for ; Mon, 14 Sep 2020 00:10:17 +0200 (CEST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailnew.nyi.internal (Postfix) with ESMTP id 6CC875800D1; Sun, 13 Sep 2020 18:08:48 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 13 Sep 2020 18:08:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=7UBbM3U+OMg92 LDUxPlQ+RWPt4FCDBioPbMcYVM8+ss=; b=nTqP3IhhWgoAGofXk/33+1lMmECzs YyTOFpaVJymeF150y8jxvbgULxGFxQcGmXprkbg/Z+OjDnNoNqj109+lfz7ZNnoZ JCSZQ2wRVQ9YAJr0scTLDu9JN1g4fv4Y/Fj9ZxaaUjXWGLewQD0vs4i1iN20VThj a0x9xEq3kTZbm0x83ZgjuihjNdS8YqMPdo52Q0l3Mvg2qLdUCORdApncXfVj1YaW Z4RDKLX7BBgeeEmiHA0NfTtHas4ojfg15umJi4caYd9VBOkxNR8BhDdOO/t/52PC pLUZSgIE3MvYiU1+39I7Ld9zn925aaRKSx2QPu92+bRb5vOebsdET+hAA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=7UBbM3U+OMg92LDUxPlQ+RWPt4FCDBioPbMcYVM8+ss=; b=J+fV8ADf uICHsRuCZXO/XjDL3veE79hmmyN1H+uasxU9o/Bo/1TxiyCyisc9VZ2MIEG2veRS l3/2oy8zkK0/zmrFTSS14Lux/LIdim9aL3AKDDvE8CBhcCgydQT8LuMxr8K+yyY+ sFUL+rV7g5Pi3+iBiNXx1Pm+Gah3TkKzlaCRRuXDShOh51MYUv5mv+xxeIUNAhyV aypVRzU57eYF8PHr+eZSSzwr3Ci/RoK/AqJ4G31Hr1A/gjm6411WEOq5e5vPh6AN e/N+4N+nxxIzLztjGs/LrH26KShFCbqjGJ09LJMyQoFqwNhkqbDRueEHM1JKYtLH /cA1ARAFOlbllw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeihedgtdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhephedtudeugfegkeevheeuiedtfefhvdekveetvdefiedvffduuedu heduteeivddunecuffhomhgrihhnpeguphgukhdrohhrghenucfkphepjeejrddufeegrd dvtdefrddukeegnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhf rhhomhepthhhohhmrghssehmohhnjhgrlhhonhdrnhgvth X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id ADB853064674; Sun, 13 Sep 2020 18:08:40 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, arybchenko@solarflare.com, Rahul Lakkireddy , Rosen Xu , Shijith Thotton , Srisivasubramanian Srinivasan , Rasesh Mody , Shahed Shaikh , Heinrich Kuhn , Hemant Agrawal , Sachin Saxena , Gagandeep Singh , Akhil Goyal , Alfredo Cardigliano , Ray Kinsella , Neil Horman , John McNamara , Marko Kovacevic , "John W. Linville" , Ciara Loftus , Qi Zhang , Shepard Siegel , Ed Czeck , John Miller , Igor Russkikh , Pavel Belous , Steven Webster , Matt Peters , Somalapuram Amaranath , Ajit Khaparde , Somnath Kotur , Chas Williams , "Wei Hu (Xavier)" , Wei Zhao , Jeff Guo , Marcin Wojtas , Michal Krawczyk , Guy Tzalik , Evgeny Schemeilin , Igor Chauskin , John Daley , Hyong Youb Kim , Gaetan Rivet , Xiao Wang , Ziyang Xuan , Xiaoyun Wang , Guoyang Zhou , "Min Hu (Connor)" , Yisen Zhuang , Beilei Xing , Jingjing Wu , Qiming Yang , Jakub Grajciar , Matan Azrad , Shahaf Shuler , Viacheslav Ovsiienko , Zyta Szpak , Liron Himi , Stephen Hemminger , "K. Y. Srinivasan" , Haiyang Zhang , Long Li , Martin Spinler , Tetsuya Mukawa , Harman Kalra , Jerin Jacob , Nithin Dabilpuram , Kiran Kumar K , Bruce Richardson , Jasvinder Singh , Cristian Dumitrescu , Keith Wiles , Maxime Coquelin , Chenbo Xia , Zhihong Wang , Yong Wang Date: Mon, 14 Sep 2020 00:07:07 +0200 Message-Id: <20200913220711.3768597-17-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200913220711.3768597-1-thomas@monjalon.net> References: <20200913220711.3768597-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 16/20] ethdev: remove old close behaviour 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" The temporary flag RTE_ETH_DEV_CLOSE_REMOVE is removed. It was introduced in DPDK 18.11 in order to give time for PMDs to migrate. The old behaviour was to free only queues when closing a port. The new behaviour is calling rte_eth_dev_release_port() which does three more tasks: - trigger event callback - reset state and few pointers - free all generic port resources The private port resources must be released in the .dev_close callback. The .remove callback should: - call .dev_close callback - call rte_eth_dev_release_port() - free multi-port device shared resources Despite waiting two years, some drivers have not migrated, so they may hit issues with the incompatible new behaviour. After sending emails, adding logs, and announcing the deprecation, the only last solution is to declare these drivers as unmaintained: bnx2x, cxgbe, dpaa, dpaa2, enetc, ionic, ipn3ke, liquidio, nfp, pfe, qede Below is a summary of what to implement in those drivers. * The freeing of private port resources must be moved from the ".remove(device)" function to the ".dev_close(port)" function. * If a generic resource (.mac_addrs or .hash_mac_addrs) cannot be freed, it must be set to NULL in ".dev_close" function to protect from subsequent rte_eth_dev_release_port() freeing. * Note 1: The generic resources are freed in rte_eth_dev_release_port(), after ".dev_close" is called in rte_eth_dev_close(), but not when calling ".dev_close" directly from the ".remove" PMD function. That's why rte_eth_dev_release_port() must still be called explicitly from ".remove(device)" after calling the ".dev_close" PMD function. * Note 2: If a device can have multiple ports, the common resources must be freed only in the ".remove(device)" function. * Note 3: The port is supposed to be in a stopped state when it is closed. If it is not the case, it is free to the PMD implementation how to react when trying to close a non-stopped port: either try to stop it automatically or just return an error. Cc: Rahul Lakkireddy Cc: Rosen Xu Cc: Shijith Thotton Cc: Srisivasubramanian Srinivasan Cc: Rasesh Mody Cc: Shahed Shaikh Cc: Heinrich Kuhn Cc: Hemant Agrawal Cc: Sachin Saxena Cc: Gagandeep Singh Cc: Akhil Goyal Cc: Alfredo Cardigliano Signed-off-by: Thomas Monjalon --- MAINTAINERS | 22 +++++++++++----------- doc/guides/rel_notes/deprecation.rst | 6 ------ drivers/net/af_packet/rte_eth_af_packet.c | 1 - drivers/net/af_xdp/rte_eth_af_xdp.c | 2 -- drivers/net/ark/ark_ethdev.c | 2 -- drivers/net/atlantic/atl_ethdev.c | 2 -- drivers/net/avp/avp_ethdev.c | 2 -- drivers/net/axgbe/axgbe_ethdev.c | 1 - drivers/net/bnxt/bnxt_ethdev.c | 5 ----- drivers/net/bnxt/bnxt_reps.c | 4 ---- drivers/net/bonding/rte_eth_bond_pmd.c | 1 - drivers/net/e1000/em_ethdev.c | 5 ----- drivers/net/e1000/igb_ethdev.c | 10 ---------- drivers/net/ena/ena_ethdev.c | 6 ------ drivers/net/enic/enic_ethdev.c | 2 -- drivers/net/failsafe/failsafe.c | 1 - drivers/net/fm10k/fm10k_ethdev.c | 5 ----- drivers/net/hinic/hinic_pmd_ethdev.c | 6 ------ drivers/net/hns3/hns3_ethdev.c | 5 ----- drivers/net/hns3/hns3_ethdev_vf.c | 5 ----- drivers/net/i40e/i40e_ethdev.c | 5 ----- drivers/net/i40e/i40e_ethdev_vf.c | 5 ----- drivers/net/iavf/iavf_ethdev.c | 5 ----- drivers/net/ice/ice_dcf_ethdev.c | 2 -- drivers/net/ice/ice_ethdev.c | 5 ----- drivers/net/igc/igc_ethdev.c | 5 ----- drivers/net/ixgbe/ixgbe_ethdev.c | 10 ---------- drivers/net/kni/rte_eth_kni.c | 2 -- drivers/net/memif/rte_eth_memif.c | 3 --- drivers/net/mlx4/mlx4.c | 1 - drivers/net/mlx5/linux/mlx5_os.c | 2 -- drivers/net/mvneta/mvneta_ethdev.c | 3 --- drivers/net/mvpp2/mrvl_ethdev.c | 3 --- drivers/net/netvsc/hn_ethdev.c | 3 --- drivers/net/nfb/nfb_ethdev.c | 3 --- drivers/net/null/rte_eth_null.c | 1 - drivers/net/octeontx/octeontx_ethdev.c | 1 - drivers/net/octeontx2/otx2_ethdev.c | 1 - drivers/net/pcap/rte_eth_pcap.c | 1 - drivers/net/ring/rte_eth_ring.c | 1 - drivers/net/sfc/sfc_ethdev.c | 4 +--- drivers/net/softnic/rte_eth_softnic.c | 1 - drivers/net/szedata2/rte_eth_szedata2.c | 3 --- drivers/net/tap/rte_eth_tap.c | 2 +- drivers/net/vhost/rte_eth_vhost.c | 2 +- drivers/net/virtio/virtio_ethdev.c | 5 ----- drivers/net/vmxnet3/vmxnet3_ethdev.c | 3 --- lib/librte_ethdev/rte_ethdev.c | 17 +---------------- lib/librte_ethdev/rte_ethdev.h | 8 +------- 49 files changed, 16 insertions(+), 184 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 3b16d7a4b8..98aa24412e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -605,7 +605,7 @@ F: drivers/net/thunderx/ F: doc/guides/nics/thunderx.rst F: doc/guides/nics/features/thunderx.ini -Cavium LiquidIO +Cavium LiquidIO - UNMAINTAINED M: Shijith Thotton M: Srisivasubramanian Srinivasan T: git://dpdk.org/next/dpdk-next-net-mrvl @@ -622,7 +622,7 @@ F: drivers/net/octeontx/ F: doc/guides/nics/octeontx.rst F: doc/guides/nics/features/octeontx.ini -Chelsio cxgbe +Chelsio cxgbe - UNMAINTAINED M: Rahul Lakkireddy F: drivers/net/cxgbe/ F: doc/guides/nics/cxgbe.rst @@ -711,7 +711,7 @@ F: drivers/net/igc/ F: doc/guides/nics/igc.rst F: doc/guides/nics/features/igc.ini -Intel ipn3ke +Intel ipn3ke - UNMAINTAINED M: Rosen Xu T: git://dpdk.org/next/dpdk-next-net-intel F: drivers/net/ipn3ke/ @@ -794,13 +794,13 @@ F: drivers/net/nfb/ F: doc/guides/nics/nfb.rst F: doc/guides/nics/features/nfb.ini -Netronome nfp +Netronome nfp - UNMAINTAINED M: Heinrich Kuhn F: drivers/net/nfp/ F: doc/guides/nics/nfp.rst F: doc/guides/nics/features/nfp*.ini -NXP dpaa +NXP dpaa - UNMAINTAINED M: Hemant Agrawal M: Sachin Saxena F: drivers/mempool/dpaa/ @@ -808,7 +808,7 @@ F: drivers/net/dpaa/ F: doc/guides/nics/dpaa.rst F: doc/guides/nics/features/dpaa.ini -NXP dpaa2 +NXP dpaa2 - UNMAINTAINED M: Hemant Agrawal M: Sachin Saxena F: drivers/mempool/dpaa2/ @@ -816,27 +816,27 @@ F: drivers/net/dpaa2/ F: doc/guides/nics/dpaa2.rst F: doc/guides/nics/features/dpaa2.ini -NXP enetc +NXP enetc - UNMAINTAINED M: Gagandeep Singh M: Sachin Saxena F: drivers/net/enetc/ F: doc/guides/nics/enetc.rst F: doc/guides/nics/features/enetc.ini -NXP pfe +NXP pfe - UNMAINTAINED M: Gagandeep Singh M: Akhil Goyal F: doc/guides/nics/pfe.rst F: drivers/net/pfe/ F: doc/guides/nics/features/pfe.ini -Pensando ionic +Pensando ionic - UNMAINTAINED M: Alfredo Cardigliano F: drivers/net/ionic/ F: doc/guides/nics/ionic.rst F: doc/guides/nics/features/ionic.ini -QLogic bnx2x +QLogic bnx2x - UNMAINTAINED M: Rasesh Mody M: Shahed Shaikh T: git://dpdk.org/next/dpdk-next-net-mrvl @@ -844,7 +844,7 @@ F: drivers/net/bnx2x/ F: doc/guides/nics/bnx2x.rst F: doc/guides/nics/features/bnx2x*.ini -QLogic qede PMD +QLogic qede PMD - UNMAINTAINED M: Rasesh Mody M: Shahed Shaikh T: git://dpdk.org/next/dpdk-next-net-mrvl diff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst index 88d7d07613..a9d937a43c 100644 --- a/doc/guides/rel_notes/deprecation.rst +++ b/doc/guides/rel_notes/deprecation.rst @@ -189,12 +189,6 @@ Deprecation Notices - ``rte_eth_dev_stop`` - ``rte_eth_dev_close`` -* ethdev: The temporary flag RTE_ETH_DEV_CLOSE_REMOVE will be removed in 20.11. - As a consequence, the new behaviour introduced in 18.11 will be effective - for all drivers: generic port resources are freed on close operation. - Private resources are expected to be released in the ``dev_close`` callback. - More details in http://inbox.dpdk.org/dev/5248162.j6AOsuQRmx@thomas/ - * ethdev: New offload flags ``DEV_RX_OFFLOAD_FLOW_MARK`` will be added in 19.11. This will allow application to enable or disable PMDs from updating ``rte_mbuf::hash::fdir``. diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c index 3ab6f4d388..ff222c3dac 100644 --- a/drivers/net/af_packet/rte_eth_af_packet.c +++ b/drivers/net/af_packet/rte_eth_af_packet.c @@ -859,7 +859,6 @@ rte_pmd_init_internals(struct rte_vdev_device *dev, data->nb_tx_queues = (uint16_t)nb_queues; data->dev_link = pmd_link; data->mac_addrs = &(*internals)->eth_addr; - data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; (*eth_dev)->dev_ops = &ops; diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c b/drivers/net/af_xdp/rte_eth_af_xdp.c index bac9729bf8..2eabc6437f 100644 --- a/drivers/net/af_xdp/rte_eth_af_xdp.c +++ b/drivers/net/af_xdp/rte_eth_af_xdp.c @@ -1269,8 +1269,6 @@ init_internals(struct rte_vdev_device *dev, const char *if_name, eth_dev->dev_ops = &ops; eth_dev->rx_pkt_burst = eth_af_xdp_rx; eth_dev->tx_pkt_burst = eth_af_xdp_tx; - /* Let rte_eth_dev_close() release the port resources. */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; #if defined(XDP_UMEM_UNALIGNED_CHUNK_FLAG) AF_XDP_LOG(INFO, "Zero copy between umem and mbuf enabled.\n"); diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c index 9e1f8218a8..8012af75ee 100644 --- a/drivers/net/ark/ark_ethdev.c +++ b/drivers/net/ark/ark_ethdev.c @@ -261,8 +261,6 @@ eth_ark_dev_init(struct rte_eth_dev *dev) /* Use dummy function until setup */ dev->rx_pkt_burst = ð_ark_recv_pkts_noop; dev->tx_pkt_burst = ð_ark_xmit_pkts_noop; - /* Let rte_eth_dev_close() release the port resources */ - dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; ark->bar0 = (uint8_t *)pci_dev->mem_resource[0].addr; ark->a_bar = (uint8_t *)pci_dev->mem_resource[2].addr; diff --git a/drivers/net/atlantic/atl_ethdev.c b/drivers/net/atlantic/atl_ethdev.c index 16721a011f..751c81b9c1 100644 --- a/drivers/net/atlantic/atl_ethdev.c +++ b/drivers/net/atlantic/atl_ethdev.c @@ -379,8 +379,6 @@ eth_atl_dev_init(struct rte_eth_dev *eth_dev) if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - /* Vendor and Device ID need to be set before init of shared code */ hw->device_id = pci_dev->id.device_id; hw->vendor_id = pci_dev->id.vendor_id; diff --git a/drivers/net/avp/avp_ethdev.c b/drivers/net/avp/avp_ethdev.c index 2eed6acc3f..c730b7ab86 100644 --- a/drivers/net/avp/avp_ethdev.c +++ b/drivers/net/avp/avp_ethdev.c @@ -957,8 +957,6 @@ eth_avp_dev_init(struct rte_eth_dev *eth_dev) eth_dev->dev_ops = &avp_eth_dev_ops; eth_dev->rx_pkt_burst = &avp_recv_pkts; eth_dev->tx_pkt_burst = &avp_xmit_pkts; - /* Let rte_eth_dev_close() release the port resources */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; if (rte_eal_process_type() != RTE_PROC_PRIMARY) { /* diff --git a/drivers/net/axgbe/axgbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c index c5e70ea0a1..246e09016c 100644 --- a/drivers/net/axgbe/axgbe_ethdev.c +++ b/drivers/net/axgbe/axgbe_ethdev.c @@ -1623,7 +1623,6 @@ eth_axgbe_dev_init(struct rte_eth_dev *eth_dev) int ret; eth_dev->dev_ops = &axgbe_eth_dev_ops; - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; /* * For secondary processes, we don't initialise any further as primary diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c index 02e53bf04d..c580aff96b 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -5744,11 +5744,6 @@ bnxt_dev_init(struct rte_eth_dev *eth_dev, void *params __rte_unused) bnxt_alloc_switch_domain(bp); - /* Pass the information to the rte_eth_dev_close() that it should also - * release the private port resources. - */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - PMD_DRV_LOG(INFO, DRV_MODULE_NAME "found at mem %" PRIX64 ", node addr %pM\n", pci_dev->mem_resource[0].phys_addr, diff --git a/drivers/net/bnxt/bnxt_reps.c b/drivers/net/bnxt/bnxt_reps.c index fa014125e3..ceb0604216 100644 --- a/drivers/net/bnxt/bnxt_reps.c +++ b/drivers/net/bnxt/bnxt_reps.c @@ -186,10 +186,6 @@ int bnxt_vf_representor_init(struct rte_eth_dev *eth_dev, void *params) PMD_DRV_LOG(INFO, "calling bnxt_print_link_info\n"); bnxt_print_link_info(eth_dev); - /* Pass the information to the rte_eth_dev_close() that it should also - * release the private port resources. - */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; PMD_DRV_LOG(INFO, "Switch domain id %d: Representor Device %d init done\n", vf_rep_bp->switch_domain_id, vf_rep_bp->vf_id); diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index 726b47055b..f9603d16a5 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -3209,7 +3209,6 @@ bond_alloc(struct rte_vdev_device *dev, uint8_t mode) } internals = eth_dev->data->dev_private; - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; eth_dev->data->nb_rx_queues = (uint16_t)1; eth_dev->data->nb_tx_queues = (uint16_t)1; diff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c index 45d3949ff7..7d592e0313 100644 --- a/drivers/net/e1000/em_ethdev.c +++ b/drivers/net/e1000/em_ethdev.c @@ -297,11 +297,6 @@ eth_em_dev_init(struct rte_eth_dev *eth_dev) rte_ether_addr_copy((struct rte_ether_addr *)hw->mac.addr, eth_dev->data->mac_addrs); - /* Pass the information to the rte_eth_dev_close() that it should also - * release the private port resources. - */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - /* initialize the vfta */ memset(shadow_vfta, 0, sizeof(*shadow_vfta)); diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c index 564216b0a4..c7b2244890 100644 --- a/drivers/net/e1000/igb_ethdev.c +++ b/drivers/net/e1000/igb_ethdev.c @@ -844,11 +844,6 @@ 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]); - /* Pass the information to the rte_eth_dev_close() that it should also - * release the private port resources. - */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - /* initialize the vfta */ memset(shadow_vfta, 0, sizeof(*shadow_vfta)); @@ -997,11 +992,6 @@ eth_igbvf_dev_init(struct rte_eth_dev *eth_dev) return -ENOMEM; } - /* Pass the information to the rte_eth_dev_close() that it should also - * release the private port resources. - */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - /* Generate a random MAC address, if none was assigned by PF. */ if (rte_is_zero_ether_addr(perm_addr)) { rte_eth_random_addr(perm_addr->addr_bytes); diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index ea979fddd1..9d91ff0708 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -1863,12 +1863,6 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev) get_feat_ctx.dev_attr.mac_addr, (struct rte_ether_addr *)adapter->mac_addr); - /* - * Pass the information to the rte_eth_dev_close() that it should also - * release the private port resources. - */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - adapter->drv_stats = rte_zmalloc("adapter stats", sizeof(*adapter->drv_stats), RTE_CACHE_LINE_SIZE); diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c index b14ed00085..0674c668b4 100644 --- a/drivers/net/enic/enic_ethdev.c +++ b/drivers/net/enic/enic_ethdev.c @@ -1293,8 +1293,6 @@ static int eth_enicpmd_dev_init(struct rte_eth_dev *eth_dev) enic->port_id = eth_dev->data->port_id; enic->rte_dev = eth_dev; enic->dev_data = eth_dev->data; - /* Let rte_eth_dev_close() release the port resources */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; pdev = RTE_ETH_DEV_TO_PCI(eth_dev); rte_eth_copy_pci_info(eth_dev, pdev); diff --git a/drivers/net/failsafe/failsafe.c b/drivers/net/failsafe/failsafe.c index 44d47e8f72..b921e101e6 100644 --- a/drivers/net/failsafe/failsafe.c +++ b/drivers/net/failsafe/failsafe.c @@ -180,7 +180,6 @@ fs_eth_dev_create(struct rte_vdev_device *vdev) ERROR("Unable to allocate rte_eth_dev"); return -1; } - dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; priv = PRIV(dev); priv->data = dev->data; priv->rxp = FS_RX_PROXY_INIT; diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c index 82f46cebf5..22e68be448 100644 --- a/drivers/net/fm10k/fm10k_ethdev.c +++ b/drivers/net/fm10k/fm10k_ethdev.c @@ -3132,11 +3132,6 @@ eth_fm10k_dev_init(struct rte_eth_dev *dev) &dev->data->mac_addrs[0]); } - /* Pass the information to the rte_eth_dev_close() that it should also - * release the private port resources. - */ - dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - /* Reset the hw statistics */ diag = fm10k_stats_reset(dev); if (diag != 0) { diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c b/drivers/net/hinic/hinic_pmd_ethdev.c index 5f2e97d3bd..623534fda4 100644 --- a/drivers/net/hinic/hinic_pmd_ethdev.c +++ b/drivers/net/hinic/hinic_pmd_ethdev.c @@ -3100,12 +3100,6 @@ static int hinic_func_init(struct rte_eth_dev *eth_dev) goto mc_addr_fail; } - /* - * Pass the information to the rte_eth_dev_close() that it should also - * release the private port resources. - */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - /* create hardware nic_device */ rc = hinic_nic_dev_create(eth_dev); if (rc) { diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c index 96806afd87..bc853c6a8f 100644 --- a/drivers/net/hns3/hns3_ethdev.c +++ b/drivers/net/hns3/hns3_ethdev.c @@ -5528,11 +5528,6 @@ hns3_dev_init(struct rte_eth_dev *eth_dev) ð_dev->data->mac_addrs[0]); hw->adapter_state = HNS3_NIC_INITIALIZED; - /* - * Pass the information to the rte_eth_dev_close() that it should also - * release the private port resources. - */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; if (rte_atomic16_read(&hns->hw.reset.schedule) == SCHEDULE_PENDING) { hns3_err(hw, "Reschedule reset service after dev_init"); diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c index b732bbc732..7b97259c5e 100644 --- a/drivers/net/hns3/hns3_ethdev_vf.c +++ b/drivers/net/hns3/hns3_ethdev_vf.c @@ -2576,11 +2576,6 @@ hns3vf_dev_init(struct rte_eth_dev *eth_dev) rte_ether_addr_copy((struct rte_ether_addr *)hw->mac.mac_addr, ð_dev->data->mac_addrs[0]); hw->adapter_state = HNS3_NIC_INITIALIZED; - /* - * Pass the information to the rte_eth_dev_close() that it should also - * release the private port resources. - */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; if (rte_atomic16_read(&hns->hw.reset.schedule) == SCHEDULE_PENDING) { hns3_err(hw, "Reschedule reset service after dev_init"); diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index 8dccb513d4..dd8214d7be 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -1699,11 +1699,6 @@ eth_i40e_dev_init(struct rte_eth_dev *dev, void *init_params __rte_unused) rte_ether_addr_copy((struct rte_ether_addr *)hw->mac.perm_addr, &dev->data->mac_addrs[0]); - /* Pass the information to the rte_eth_dev_close() that it should also - * release the private port resources. - */ - dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - /* Init dcb to sw mode by default */ ret = i40e_dcb_init_configure(dev, TRUE); if (ret != I40E_SUCCESS) { diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c index 104eef639d..63dcff841e 100644 --- a/drivers/net/i40e/i40e_ethdev_vf.c +++ b/drivers/net/i40e/i40e_ethdev_vf.c @@ -1543,11 +1543,6 @@ i40evf_dev_init(struct rte_eth_dev *eth_dev) hw->adapter_stopped = 1; hw->adapter_closed = 0; - /* Pass the information to the rte_eth_dev_close() that it should also - * release the private port resources. - */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - if(i40evf_init_vf(eth_dev) != 0) { PMD_INIT_LOG(ERR, "Init vf failed"); return -1; diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c index f7552f33db..2a64204689 100644 --- a/drivers/net/iavf/iavf_ethdev.c +++ b/drivers/net/iavf/iavf_ethdev.c @@ -1362,11 +1362,6 @@ iavf_dev_init(struct rte_eth_dev *eth_dev) adapter->eth_dev = eth_dev; adapter->stopped = 1; - /* Pass the information to the rte_eth_dev_close() that it should also - * release the private port resources. - */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - if (iavf_init_vf(eth_dev) != 0) { PMD_INIT_LOG(ERR, "Init vf failed"); return -1; diff --git a/drivers/net/ice/ice_dcf_ethdev.c b/drivers/net/ice/ice_dcf_ethdev.c index 5b626cb641..33dd0c44f2 100644 --- a/drivers/net/ice/ice_dcf_ethdev.c +++ b/drivers/net/ice/ice_dcf_ethdev.c @@ -908,8 +908,6 @@ ice_dcf_dev_init(struct rte_eth_dev *eth_dev) if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - adapter->real_hw.vc_event_msg_cb = ice_dcf_handle_pf_event_msg; if (ice_dcf_init_hw(eth_dev, &adapter->real_hw) != 0) { PMD_INIT_LOG(ERR, "Failed to init DCF hardware"); diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c index 042ee6def0..f0cb05cbc9 100644 --- a/drivers/net/ice/ice_ethdev.c +++ b/drivers/net/ice/ice_ethdev.c @@ -2206,11 +2206,6 @@ ice_dev_init(struct rte_eth_dev *dev) goto err_init_mac; } - /* Pass the information to the rte_eth_dev_close() that it should also - * release the private port resources. - */ - dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - ret = ice_res_pool_init(&pf->msix_pool, 1, hw->func_caps.common_cap.num_msix_vectors - 1); if (ret) { diff --git a/drivers/net/igc/igc_ethdev.c b/drivers/net/igc/igc_ethdev.c index 99014a369c..a9dda1f781 100644 --- a/drivers/net/igc/igc_ethdev.c +++ b/drivers/net/igc/igc_ethdev.c @@ -1324,11 +1324,6 @@ eth_igc_dev_init(struct rte_eth_dev *dev) goto err_late; } - /* Pass the information to the rte_eth_dev_close() that it should also - * release the private port resources. - */ - dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - hw->mac.get_link_status = 1; igc->stopped = 0; diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index 5c12a575c2..195383ce1f 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -1251,11 +1251,6 @@ eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused) return -ENOMEM; } - /* Pass the information to the rte_eth_dev_close() that it should also - * release the private port resources. - */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - /* initialize the vfta */ memset(shadow_vfta, 0, sizeof(*shadow_vfta)); @@ -1663,11 +1658,6 @@ eth_ixgbevf_dev_init(struct rte_eth_dev *eth_dev) return -ENOMEM; } - /* Pass the information to the rte_eth_dev_close() that it should also - * release the private port resources. - */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - /* Generate a random MAC address, if none was assigned by PF. */ if (rte_is_zero_ether_addr(perm_addr)) { generate_random_mac_addr(perm_addr); diff --git a/drivers/net/kni/rte_eth_kni.c b/drivers/net/kni/rte_eth_kni.c index aa365a57de..45ab1b17a8 100644 --- a/drivers/net/kni/rte_eth_kni.c +++ b/drivers/net/kni/rte_eth_kni.c @@ -387,8 +387,6 @@ eth_kni_create(struct rte_vdev_device *vdev, data->promiscuous = 1; data->all_multicast = 1; - data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - rte_eth_random_addr(internals->eth_addr.addr_bytes); eth_dev->dev_ops = ð_kni_ops; diff --git a/drivers/net/memif/rte_eth_memif.c b/drivers/net/memif/rte_eth_memif.c index c00b9702a9..666dec77c6 100644 --- a/drivers/net/memif/rte_eth_memif.c +++ b/drivers/net/memif/rte_eth_memif.c @@ -1512,9 +1512,6 @@ memif_create(struct rte_vdev_device *vdev, enum memif_role_t role, eth_dev->tx_pkt_burst = eth_memif_tx; } - - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - rte_eth_dev_probing_finish(eth_dev); return 0; diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index ad7c805d67..3e57875414 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -1027,7 +1027,6 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) ERROR("can not allocate rte ethdev"); goto port_error; } - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; eth_dev->data->dev_private = priv; eth_dev->data->mac_addrs = priv->mac; eth_dev->device = &pci_dev->device; diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c index 69123e12c3..7fce24cafc 100644 --- a/drivers/net/mlx5/linux/mlx5_os.c +++ b/drivers/net/mlx5/linux/mlx5_os.c @@ -1136,8 +1136,6 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, err = ENOMEM; goto error; } - /* Flag to call rte_eth_dev_release_port() in rte_eth_dev_close(). */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; if (priv->representor) { eth_dev->data->dev_flags |= RTE_ETH_DEV_REPRESENTOR; eth_dev->data->representor_id = priv->representor_id; diff --git a/drivers/net/mvneta/mvneta_ethdev.c b/drivers/net/mvneta/mvneta_ethdev.c index b13e2c52f3..f0a52e29fd 100644 --- a/drivers/net/mvneta/mvneta_ethdev.c +++ b/drivers/net/mvneta/mvneta_ethdev.c @@ -835,9 +835,6 @@ mvneta_eth_dev_create(struct rte_vdev_device *vdev, const char *name) mvneta_set_tx_function(eth_dev); eth_dev->dev_ops = &mvneta_ops; - /* Flag to call rte_eth_dev_release_port() in rte_eth_dev_close(). */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - rte_eth_dev_probing_finish(eth_dev); return 0; out_free: diff --git a/drivers/net/mvpp2/mrvl_ethdev.c b/drivers/net/mvpp2/mrvl_ethdev.c index b40169daba..e115e7d0c1 100644 --- a/drivers/net/mvpp2/mrvl_ethdev.c +++ b/drivers/net/mvpp2/mrvl_ethdev.c @@ -2864,9 +2864,6 @@ mrvl_eth_dev_create(struct rte_vdev_device *vdev, const char *name) mrvl_set_tx_function(eth_dev); eth_dev->dev_ops = &mrvl_ops; - /* Flag to call rte_eth_dev_release_port() in rte_eth_dev_close(). */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - rte_eth_dev_probing_finish(eth_dev); return 0; out_free: diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c index f02f546882..c4a2dd9f4a 100644 --- a/drivers/net/netvsc/hn_ethdev.c +++ b/drivers/net/netvsc/hn_ethdev.c @@ -123,9 +123,6 @@ eth_dev_vmbus_allocate(struct rte_vmbus_device *dev, size_t private_data_size) eth_dev->data->dev_flags |= RTE_ETH_DEV_INTR_LSC; eth_dev->intr_handle = &dev->intr_handle; - /* allow ethdev to remove on close */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - return eth_dev; } diff --git a/drivers/net/nfb/nfb_ethdev.c b/drivers/net/nfb/nfb_ethdev.c index c3c3d003f1..d937ac6922 100644 --- a/drivers/net/nfb/nfb_ethdev.c +++ b/drivers/net/nfb/nfb_ethdev.c @@ -457,9 +457,6 @@ nfb_eth_dev_init(struct rte_eth_dev *dev) rte_kvargs_free(kvlist); } - /* Let rte_eth_dev_close() release the port resources */ - dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - /* * Get number of available DMA RX and TX queues, which is maximum * number of queues that can be created and store it in private device diff --git a/drivers/net/null/rte_eth_null.c b/drivers/net/null/rte_eth_null.c index 33997013e4..ab7ebe3ddc 100644 --- a/drivers/net/null/rte_eth_null.c +++ b/drivers/net/null/rte_eth_null.c @@ -545,7 +545,6 @@ eth_dev_null_create(struct rte_vdev_device *dev, struct pmd_options *args) data->mac_addrs = &internals->eth_addr; data->promiscuous = 1; data->all_multicast = 1; - data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; eth_dev->dev_ops = &ops; diff --git a/drivers/net/octeontx/octeontx_ethdev.c b/drivers/net/octeontx/octeontx_ethdev.c index 6713c51504..328551b60f 100644 --- a/drivers/net/octeontx/octeontx_ethdev.c +++ b/drivers/net/octeontx/octeontx_ethdev.c @@ -1375,7 +1375,6 @@ octeontx_create(struct rte_vdev_device *dev, int port, uint8_t evdev, data->promiscuous = 0; data->all_multicast = 0; data->scattered_rx = 0; - data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; /* Get maximum number of supported MAC entries */ max_entries = octeontx_bgx_port_mac_entries_get(nic->port_id); diff --git a/drivers/net/octeontx2/otx2_ethdev.c b/drivers/net/octeontx2/otx2_ethdev.c index d9bcf004c6..ca320047f6 100644 --- a/drivers/net/octeontx2/otx2_ethdev.c +++ b/drivers/net/octeontx2/otx2_ethdev.c @@ -2394,7 +2394,6 @@ otx2_eth_dev_init(struct rte_eth_dev *eth_dev) pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev); rte_eth_copy_pci_info(eth_dev, pci_dev); - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; /* Zero out everything after OTX2_DEV to allow proper dev_reset() */ memset(&dev->otx2_eth_dev_data_start, 0, sizeof(*dev) - diff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c index a946fa9a1a..fbbad5cbd1 100644 --- a/drivers/net/pcap/rte_eth_pcap.c +++ b/drivers/net/pcap/rte_eth_pcap.c @@ -1334,7 +1334,6 @@ eth_from_pcaps(struct rte_vdev_device *vdev, else eth_dev->tx_pkt_burst = eth_tx_drop; - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; rte_eth_dev_probing_finish(eth_dev); return 0; } diff --git a/drivers/net/ring/rte_eth_ring.c b/drivers/net/ring/rte_eth_ring.c index afe3ec46cc..8ed53c64af 100644 --- a/drivers/net/ring/rte_eth_ring.c +++ b/drivers/net/ring/rte_eth_ring.c @@ -356,7 +356,6 @@ do_eth_dev_ring_create(const char *name, eth_dev->dev_ops = &ops; data->kdrv = RTE_KDRV_NONE; data->numa_node = numa_node; - data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; /* finally assign rx and tx ops */ eth_dev->rx_pkt_burst = eth_ring_rx; diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index f1b857358c..b609d808d7 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -343,7 +343,7 @@ sfc_dev_close(struct rte_eth_dev *dev) } /* - * Cleanup all resources in accordance with RTE_ETH_DEV_CLOSE_REMOVE. + * Cleanup all resources. * Rollback primary process sfc_eth_dev_init() below. */ @@ -2179,8 +2179,6 @@ sfc_eth_dev_init(struct rte_eth_dev *dev) sfc_log_init(sa, "entry"); - dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - dev->data->mac_addrs = rte_zmalloc("sfc", RTE_ETHER_ADDR_LEN, 0); if (dev->data->mac_addrs == NULL) { rc = ENOMEM; diff --git a/drivers/net/softnic/rte_eth_softnic.c b/drivers/net/softnic/rte_eth_softnic.c index 5b94e250d8..0e5ec0cdf0 100644 --- a/drivers/net/softnic/rte_eth_softnic.c +++ b/drivers/net/softnic/rte_eth_softnic.c @@ -387,7 +387,6 @@ pmd_ethdev_register(struct rte_vdev_device *vdev, dev->device = &vdev->device; /* dev->data */ - dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; dev->data->dev_private = dev_private; dev->data->dev_link.link_speed = ETH_SPEED_NUM_100G; dev->data->dev_link.link_duplex = ETH_LINK_FULL_DUPLEX; diff --git a/drivers/net/szedata2/rte_eth_szedata2.c b/drivers/net/szedata2/rte_eth_szedata2.c index daa40cfd6c..4325b9a30d 100644 --- a/drivers/net/szedata2/rte_eth_szedata2.c +++ b/drivers/net/szedata2/rte_eth_szedata2.c @@ -1488,9 +1488,6 @@ rte_szedata2_eth_dev_init(struct rte_eth_dev *dev, struct port_info *pi) PMD_INIT_LOG(INFO, "Initializing eth_dev %s (driver %s)", data->name, RTE_STR(RTE_SZEDATA2_DRIVER_NAME)); - /* Let rte_eth_dev_close() release the port resources */ - dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - /* Fill internal private structure. */ internals->dev = dev; /* Get index of szedata2 device file and create path to device file */ diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c index 2e325f55aa..99f6dc118c 100644 --- a/drivers/net/tap/rte_eth_tap.c +++ b/drivers/net/tap/rte_eth_tap.c @@ -1876,7 +1876,7 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, const char *tap_name, /* Setup some default values */ data = dev->data; data->dev_private = pmd; - data->dev_flags = RTE_ETH_DEV_INTR_LSC | RTE_ETH_DEV_CLOSE_REMOVE; + data->dev_flags = RTE_ETH_DEV_INTR_LSC; data->numa_node = numa_node; data->dev_link = pmd_link; diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c index fb3b9ce043..36baf8f881 100644 --- a/drivers/net/vhost/rte_eth_vhost.c +++ b/drivers/net/vhost/rte_eth_vhost.c @@ -1444,7 +1444,7 @@ eth_dev_vhost_create(struct rte_vdev_device *dev, char *iface_name, internal->flags = flags; internal->disable_flags = disable_flags; data->dev_link = pmd_link; - data->dev_flags = RTE_ETH_DEV_INTR_LSC | RTE_ETH_DEV_CLOSE_REMOVE; + data->dev_flags = RTE_ETH_DEV_INTR_LSC; data->promiscuous = 1; data->all_multicast = 1; diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c index 1731fc6750..735c579a86 100644 --- a/drivers/net/virtio/virtio_ethdev.c +++ b/drivers/net/virtio/virtio_ethdev.c @@ -1923,11 +1923,6 @@ eth_virtio_dev_init(struct rte_eth_dev *eth_dev) if (ret < 0) return ret; hw->speed = speed; - /* - * Pass the information to the rte_eth_dev_close() that it should also - * release the private port resources. - */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; /* Allocate memory for storing MAC addresses */ eth_dev->data->mac_addrs = rte_zmalloc("virtio", diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c index 4efb48350c..221f771023 100644 --- a/drivers/net/vmxnet3/vmxnet3_ethdev.c +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c @@ -321,9 +321,6 @@ eth_vmxnet3_dev_init(struct rte_eth_dev *eth_dev) hw->perm_addr[0], hw->perm_addr[1], hw->perm_addr[2], hw->perm_addr[3], hw->perm_addr[4], hw->perm_addr[5]); - /* Flag to call rte_eth_dev_release_port() in rte_eth_dev_close(). */ - eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - /* Put device in Quiesce Mode */ VMXNET3_WRITE_BAR1_REG(hw, VMXNET3_REG_CMD, VMXNET3_CMD_QUIESCE_DEV); diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index 3617f39ca0..f1b0bdd3bc 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -1720,22 +1720,7 @@ rte_eth_dev_close(uint16_t port_id) (*dev->dev_ops->dev_close)(dev); rte_ethdev_trace_close(port_id); - /* check behaviour flag - temporary for PMD migration */ - if ((dev->data->dev_flags & RTE_ETH_DEV_CLOSE_REMOVE) != 0) { - /* new behaviour: send event + reset state + free all data */ - rte_eth_dev_release_port(dev); - return; - } - RTE_ETHDEV_LOG(DEBUG, "Port closing is using an old behaviour.\n" - "The driver %s should migrate to the new behaviour.\n", - dev->device->driver->name); - /* old behaviour: only free queue arrays */ - dev->data->nb_rx_queues = 0; - rte_free(dev->data->rx_queues); - dev->data->rx_queues = NULL; - dev->data->nb_tx_queues = 0; - rte_free(dev->data->tx_queues); - dev->data->tx_queues = NULL; + rte_eth_dev_release_port(dev); } int diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h index 70295d7ab7..f9775c2524 100644 --- a/lib/librte_ethdev/rte_ethdev.h +++ b/lib/librte_ethdev/rte_ethdev.h @@ -1621,11 +1621,6 @@ struct rte_eth_dev_owner { char name[RTE_ETH_MAX_OWNER_NAME_LEN]; /**< The owner name. */ }; -/** - * Port is released (i.e. totally freed and data erased) on close. - * Temporary flag for PMD migration to new rte_eth_dev_close() behaviour. - */ -#define RTE_ETH_DEV_CLOSE_REMOVE 0x0001 /** Device supports link state interrupt */ #define RTE_ETH_DEV_INTR_LSC 0x0002 /** Device is a bonded slave */ @@ -2250,8 +2245,7 @@ int rte_eth_dev_set_link_down(uint16_t port_id); /** * Close a stopped Ethernet device. The device cannot be restarted! - * The function frees all port resources if the driver supports - * the flag RTE_ETH_DEV_CLOSE_REMOVE. + * The function frees all port resources. * * @param port_id * The port identifier of the Ethernet device. From patchwork Sun Sep 13 22:07:08 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 77570 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 524F7A04C9; Mon, 14 Sep 2020 00:10:19 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 3AA551BE81; Mon, 14 Sep 2020 00:10:19 +0200 (CEST) Received: from new4-smtp.messagingengine.com (new4-smtp.messagingengine.com [66.111.4.230]) by dpdk.org (Postfix) with ESMTP id 30B781BE81 for ; Mon, 14 Sep 2020 00:10:17 +0200 (CEST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailnew.nyi.internal (Postfix) with ESMTP id B67DE5800D2; Sun, 13 Sep 2020 18:08:53 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 13 Sep 2020 18:08:53 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=ruXm2iHeTLiqP c508NX4fiwYb+8LXV0bCunwjmo2POQ=; b=GTSo3gFw91e8TCo1nBWUP4aqoA+gI VFCOt09YoHekDBHYnHaFH5aqUUSFTLZTJfW8vJ8NWGSCSUaBtLL69u0WjC3f1IS2 BXAOqASgQEFIbx2+PFOdv7Y0XwXIAEIjo5jUaezf7Y6qSMpS1XCwRj5mLmYrQKDQ hAwE7+A2hVXH5+m14mVV2BnmooIr9ZaMjVAxNRPNHOOnZKrOEnBsinBbtVsIltCw TiKw1lOrBIkFTmbv7fTSLBOdRhsncMcTU18sHTaB6Xpu7yKW+ERcQVuOQiKRbwdX a2Y2d6uq7XqfhUG+jOnUc+1gkRE7syw+Z2d00UiPUP6/lZR5Rek0hG7eA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=ruXm2iHeTLiqPc508NX4fiwYb+8LXV0bCunwjmo2POQ=; b=aVUgES/Q AwIen4VXg3SchXlkf63u5tE1VxDhAGhWwSoEVTfJG4NXBX+YREeB4tnZJfiCWPgS z3I0MQ0aDptBxH9AUrX9uVTXDI9IN8odF9AIYXQ7bNVYuEsVGR38GGeQVgpR3hzZ odJvx7PC4vlr+azx6huADN8B7fniDgbCGdX1txcDXVlPITxM/hsHRdtoQM2Ux5EV R+uhGy6an7uPXtF026LOifGLeqtemo0wq3kvMBu61TEAShI1fjxkTr2yUdq+89Mq M2FLWC2E4LLzp1IwyhqLjKp+meaeDgXAW7+Sqzk65PECIZGCzWjEqYdEz9I68tlY jFJVVUJbvQVtNg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeihedgtdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepvdehgfeivdejgedtveehfefhteelfefgieevgfffveefjeegtdfg uedthedtgeevnecukfhppeejjedrudefgedrvddtfedrudekgeenucevlhhushhtvghruf hiiigvpeduieenucfrrghrrghmpehmrghilhhfrhhomhepthhhohhmrghssehmohhnjhgr lhhonhdrnhgvth X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id 23B013064674; Sun, 13 Sep 2020 18:08:52 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, arybchenko@solarflare.com, Rosen Xu , Stephen Hemminger , "K. Y. Srinivasan" , Haiyang Zhang , Long Li , Heinrich Kuhn , Gagandeep Singh , Akhil Goyal , Martin Spinler , Anatoly Burakov Date: Mon, 14 Sep 2020 00:07:08 +0200 Message-Id: <20200913220711.3768597-18-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200913220711.3768597-1-thomas@monjalon.net> References: <20200913220711.3768597-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 17/20] drivers/net: accept removing device without any port 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" The ports can be closed (i.e. completely released) before removing the whole device. Such case was wrongly considered an error by some drivers. If the device supports only one port, there is nothing much to free after the port is closed. Signed-off-by: Thomas Monjalon Reviewed-by: Ferruh Yigit Reviewed-by: Rosen Xu --- drivers/net/ipn3ke/ipn3ke_ethdev.c | 6 ++---- drivers/net/kni/rte_eth_kni.c | 16 +++++++--------- drivers/net/netvsc/hn_ethdev.c | 2 +- drivers/net/nfp/nfp_net.c | 2 ++ drivers/net/pfe/pfe_ethdev.c | 6 ++---- drivers/net/szedata2/rte_eth_szedata2.c | 6 ++---- 6 files changed, 16 insertions(+), 22 deletions(-) diff --git a/drivers/net/ipn3ke/ipn3ke_ethdev.c b/drivers/net/ipn3ke/ipn3ke_ethdev.c index 027be29bd8..4446d2af9e 100644 --- a/drivers/net/ipn3ke/ipn3ke_ethdev.c +++ b/drivers/net/ipn3ke/ipn3ke_ethdev.c @@ -562,10 +562,8 @@ static int ipn3ke_vswitch_remove(struct rte_afu_device *afu_dev) afu_dev->device.name, i); ethdev = rte_eth_dev_allocated(afu_dev->device.name); - if (!ethdev) - return -ENODEV; - - rte_eth_dev_destroy(ethdev, ipn3ke_rpst_uninit); + if (ethdev != NULL) + rte_eth_dev_destroy(ethdev, ipn3ke_rpst_uninit); } ret = rte_eth_switch_domain_free(hw->switch_domain_id); diff --git a/drivers/net/kni/rte_eth_kni.c b/drivers/net/kni/rte_eth_kni.c index 45ab1b17a8..2a4058f7b0 100644 --- a/drivers/net/kni/rte_eth_kni.c +++ b/drivers/net/kni/rte_eth_kni.c @@ -488,17 +488,15 @@ eth_kni_remove(struct rte_vdev_device *vdev) /* find the ethdev entry */ eth_dev = rte_eth_dev_allocated(name); - if (eth_dev == NULL) - return -1; - - if (rte_eal_process_type() != RTE_PROC_PRIMARY) { - eth_kni_dev_stop(eth_dev); - return rte_eth_dev_release_port(eth_dev); + if (eth_dev != NULL) { + if (rte_eal_process_type() != RTE_PROC_PRIMARY) { + eth_kni_dev_stop(eth_dev); + return rte_eth_dev_release_port(eth_dev); + } + eth_kni_close(eth_dev); + rte_eth_dev_release_port(eth_dev); } - eth_kni_close(eth_dev); - rte_eth_dev_release_port(eth_dev); - is_kni_initialized--; if (is_kni_initialized == 0) rte_kni_close(); diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c index c4a2dd9f4a..4c37dc520c 100644 --- a/drivers/net/netvsc/hn_ethdev.c +++ b/drivers/net/netvsc/hn_ethdev.c @@ -1092,7 +1092,7 @@ static int eth_hn_remove(struct rte_vmbus_device *dev) eth_dev = rte_eth_dev_allocated(dev->device.name); if (!eth_dev) - return -ENODEV; + return 0; /* port already released */ ret = eth_hn_dev_uninit(eth_dev); if (ret) diff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c index c20d71cdc3..2f108099a3 100644 --- a/drivers/net/nfp/nfp_net.c +++ b/drivers/net/nfp/nfp_net.c @@ -3721,6 +3721,8 @@ static int eth_nfp_pci_remove(struct rte_pci_device *pci_dev) int port = 0; eth_dev = rte_eth_dev_allocated(pci_dev->device.name); + if (eth_dev == NULL) + return 0; /* port already released */ if ((pci_dev->id.device_id == PCI_DEVICE_ID_NFP4000_PF_NIC) || (pci_dev->id.device_id == PCI_DEVICE_ID_NFP6000_PF_NIC)) { port = get_pf_port_number(eth_dev->data->name); diff --git a/drivers/net/pfe/pfe_ethdev.c b/drivers/net/pfe/pfe_ethdev.c index 8867b61a9d..7a36303785 100644 --- a/drivers/net/pfe/pfe_ethdev.c +++ b/drivers/net/pfe/pfe_ethdev.c @@ -1158,10 +1158,8 @@ pmd_pfe_remove(struct rte_vdev_device *vdev) return 0; eth_dev = rte_eth_dev_allocated(name); - if (eth_dev == NULL) - return -ENODEV; - - pfe_eth_exit(eth_dev, g_pfe); + if (eth_dev != NULL) + pfe_eth_exit(eth_dev, g_pfe); munmap(g_pfe->cbus_baseaddr, g_pfe->cbus_size); if (g_pfe->nb_devs == 0) { diff --git a/drivers/net/szedata2/rte_eth_szedata2.c b/drivers/net/szedata2/rte_eth_szedata2.c index 4325b9a30d..5f589dfa4c 100644 --- a/drivers/net/szedata2/rte_eth_szedata2.c +++ b/drivers/net/szedata2/rte_eth_szedata2.c @@ -1910,10 +1910,8 @@ static int szedata2_eth_pci_remove(struct rte_pci_device *pci_dev) pci_dev->device.name, i); PMD_DRV_LOG(DEBUG, "Removing eth_dev %s", name); eth_dev = rte_eth_dev_allocated(name); - if (!eth_dev) { - PMD_DRV_LOG(ERR, "eth_dev %s not found", name); - retval = retval ? retval : -ENODEV; - } + if (eth_dev == NULL) + continue; /* port already released */ ret = rte_szedata2_eth_dev_uninit(eth_dev); if (ret != 0) { From patchwork Sun Sep 13 22:07:09 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 77567 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id E7C5CA04C9; Mon, 14 Sep 2020 00:09:43 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7790F1C0CE; Mon, 14 Sep 2020 00:09:04 +0200 (CEST) Received: from wnew2-smtp.messagingengine.com (wnew2-smtp.messagingengine.com [64.147.123.27]) by dpdk.org (Postfix) with ESMTP id 585921C0AC for ; Mon, 14 Sep 2020 00:09:02 +0200 (CEST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailnew.west.internal (Postfix) with ESMTP id 8D80D5E2; Sun, 13 Sep 2020 18:09:00 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 13 Sep 2020 18:09:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=YINKezvtHFDfQ nkRA5+oczbrKUpiy938J0QTZR6JuEQ=; b=wuyHxJA60Vg96enZdDphKHWcccEez VK3seuRYshb9p+dXVcZrXygp3ErNPb67bXldgZ0z0DR1etCihBRSq+h6D2th8NRx hQndkIsUQWIRoO7rdizsa5+DmvO/4jnWp3yEpkQ2rBpoj/FrUmKfijyiu8j5h+Le wX8WaOLoNt0xV0BF9a4kQyWUV+jJGoQpEvU/QKXlv94MJzYGMbPHJqB07vydEGy6 XlykbOQHlcvX04Wl7BvWebVP6UsVh4oqoPSuMLlEKz3cOKAfXQ769uqyVNw33DBd UUHyeIE0awEZ3gDwlx07PKsZCeC6oMV+ZB50kismvYo73JSlLymmoVDRw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=YINKezvtHFDfQnkRA5+oczbrKUpiy938J0QTZR6JuEQ=; b=QspRuZGN f+XefH89LWNPWC9ymYn/fYg5orzvX5j8UX0u+spE6lmdMPsQbu5EmRhVjuR0u121 vtdkzHUDqdLaOp18+7s2ecPjCu9sw4qTnjxLg5NEt25OLCzuisjSSClDOHe2wfH0 meEKSunrRYTgymDPk52o0gqUCo6udvBz6dXQ2Z5/Q/RtKgw/m2GzSnolaPs9Ba92 hCLH+aN0yjrZ6vNQPvO+G5xfd3f0sgTferp9Cm9/1ErPSFwdDVcCkY7Qhk6xBY1i yVjKgdp1UHFFpS8rGH19Csi6dl08w5xR//+g5ObTbq/c2n6zRvZ8ljrjehigKaT6 3L6koHf3IytOLQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeihedgtdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepvdehgfeivdejgedtveehfefhteelfefgieevgfffveefjeegtdfg uedthedtgeevnecukfhppeejjedrudefgedrvddtfedrudekgeenucevlhhushhtvghruf hiiigvpedujeenucfrrghrrghmpehmrghilhhfrhhomhepthhhohhmrghssehmohhnjhgr lhhonhdrnhgvth X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id B39BD3064674; Sun, 13 Sep 2020 18:08:58 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, arybchenko@solarflare.com, Shepard Siegel , Ed Czeck , John Miller , Ziyang Xuan , Xiaoyun Wang , Guoyang Zhou , Qiming Yang , Qi Zhang , Martin Spinler Date: Mon, 14 Sep 2020 00:07:09 +0200 Message-Id: <20200913220711.3768597-19-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200913220711.3768597-1-thomas@monjalon.net> References: <20200913220711.3768597-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 18/20] drivers/net: remove redundant MAC addresses freeing 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" The MAC addresses array is already freed by rte_eth_dev_release_port(). The redundant freeing can be removed from the PMD port closing functions. Signed-off-by: Thomas Monjalon Reviewed-by: Ferruh Yigit --- drivers/net/ark/ark_ethdev.c | 3 --- drivers/net/hinic/hinic_pmd_ethdev.c | 3 --- drivers/net/ice/ice_ethdev.c | 3 --- drivers/net/nfb/nfb_ethdev.c | 3 --- drivers/net/szedata2/rte_eth_szedata2.c | 3 --- 5 files changed, 15 deletions(-) diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c index 8012af75ee..641a694717 100644 --- a/drivers/net/ark/ark_ethdev.c +++ b/drivers/net/ark/ark_ethdev.c @@ -707,9 +707,6 @@ eth_ark_dev_close(struct rte_eth_dev *dev) dev->data->rx_queues[i] = 0; } - rte_free(dev->data->mac_addrs); - dev->data->mac_addrs = 0; - return 0; } diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c b/drivers/net/hinic/hinic_pmd_ethdev.c index 623534fda4..460093bf95 100644 --- a/drivers/net/hinic/hinic_pmd_ethdev.c +++ b/drivers/net/hinic/hinic_pmd_ethdev.c @@ -3225,9 +3225,6 @@ static int hinic_dev_uninit(struct rte_eth_dev *dev) rte_free(nic_dev->mc_list); - rte_free(dev->data->mac_addrs); - dev->data->mac_addrs = NULL; - return HINIC_OK; } diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c index f0cb05cbc9..1a7896f0da 100644 --- a/drivers/net/ice/ice_ethdev.c +++ b/drivers/net/ice/ice_ethdev.c @@ -2423,9 +2423,6 @@ ice_dev_close(struct rte_eth_dev *dev) dev->rx_pkt_burst = NULL; dev->tx_pkt_burst = NULL; - rte_free(dev->data->mac_addrs); - dev->data->mac_addrs = NULL; - /* disable uio intr before callback unregister */ rte_intr_disable(intr_handle); diff --git a/drivers/net/nfb/nfb_ethdev.c b/drivers/net/nfb/nfb_ethdev.c index d937ac6922..6fe7500475 100644 --- a/drivers/net/nfb/nfb_ethdev.c +++ b/drivers/net/nfb/nfb_ethdev.c @@ -233,9 +233,6 @@ nfb_eth_dev_close(struct rte_eth_dev *dev) } dev->data->nb_tx_queues = 0; - rte_free(dev->data->mac_addrs); - dev->data->mac_addrs = NULL; - return 0; } diff --git a/drivers/net/szedata2/rte_eth_szedata2.c b/drivers/net/szedata2/rte_eth_szedata2.c index 5f589dfa4c..9ae653e1bd 100644 --- a/drivers/net/szedata2/rte_eth_szedata2.c +++ b/drivers/net/szedata2/rte_eth_szedata2.c @@ -1178,9 +1178,6 @@ eth_dev_close(struct rte_eth_dev *dev) } dev->data->nb_tx_queues = 0; - rte_free(dev->data->mac_addrs); - dev->data->mac_addrs = NULL; - return 0; } From patchwork Sun Sep 13 22:07:10 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 77568 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3B6A8A04C9; Mon, 14 Sep 2020 00:09:54 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id E1D3D1C197; Mon, 14 Sep 2020 00:09:06 +0200 (CEST) Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) by dpdk.org (Postfix) with ESMTP id 290BD1C196 for ; Mon, 14 Sep 2020 00:09:06 +0200 (CEST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id 013474A2; Sun, 13 Sep 2020 18:09:04 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 13 Sep 2020 18:09:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=JxB0p6C6Zh3VU +hMaROOwX7RQTee26NX/EVd/Yiof+c=; b=QiyvkcQccvwUl39FdPLRo+NeKLNNP DDdkGpNf3wt/OaMoc3L0TcWficchdeSXVO721nU7mZp/l+facXyvv5KBdVpaE4NP KeA/0u7HeU272ZE+9T1dMZZgOE6gpjIZvWYplF66hCkbrZN8gINGykhdjZUTZ7mq w20vC0aBXdozMhUltEMAYKWt8dYUDMyb+1+QCXpoecABzQWlgrSEPFYr1xGYhqKs 4wb/E7UZiXmt+JTYgK4xddYwhIRJvqRznWIQz7uW3VrVFpIym4xW1s/sKwSGYJ1W sgoUoRhRn2uO4r7Oe0X94DeEqhmykc/h3H9F99l62Xj/heagqjRn1n9kQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=JxB0p6C6Zh3VU+hMaROOwX7RQTee26NX/EVd/Yiof+c=; b=eFeOL/J8 x98jAbrYFs/mrfaDtPq8xNPC1VCivdgaCD6hL4OXkm6zOJrB6yNU06sviFJSGvsH TCH9OeRY43UikjfY1IPJJ4fSb268AEo8W0+HBkACz4Z1jHOVJCTAJbD0mp2GSa34 br6C/UjMIyUUdrzpBVlpAbmuYVTPIaUq7nXOcbwilMnAcSgCXDu+koZr1aCAmCQD 2oBdc0nov1hL2eBawUYUGmi+OnQ222ilFUSoaPkSBPwQZ/QUqfyHeaTjLvjHea/a 33jcSdx+gNLmDljI9aPYAubWRKnpzK4QUTh1MUixsXAqw8HA0VlFMqy6L5vcjmyd 4tyGAZ7oA9pfiA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeihedgtdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepvdehgfeivdejgedtveehfefhteelfefgieevgfffveefjeegtdfg uedthedtgeevnecukfhppeejjedrudefgedrvddtfedrudekgeenucevlhhushhtvghruf hiiigvpedujeenucfrrghrrghmpehmrghilhhfrhhomhepthhhohhmrghssehmohhnjhgr lhhonhdrnhgvth X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id A8741306467D; Sun, 13 Sep 2020 18:09:03 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, arybchenko@solarflare.com, Wenzhuo Lu , Beilei Xing , Bernard Iremonger Date: Mon, 14 Sep 2020 00:07:10 +0200 Message-Id: <20200913220711.3768597-20-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200913220711.3768597-1-thomas@monjalon.net> References: <20200913220711.3768597-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 19/20] app/testpmd: reset port status on close notification 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" Since rte_eth_dev_release_port() is called on all port close operations, the event RTE_ETH_EVENT_DESTROY can be reliably used for resetting the port status on the application side. The intermediate state RTE_PORT_HANDLING is removed in close_port() because a port can also be closed by a PMD in a device remove operation. In case multiple ports are closed, calling remove_invalid_ports() only once is enough. Signed-off-by: Thomas Monjalon --- app/test-pmd/testpmd.c | 34 ++++++++-------------------------- 1 file changed, 8 insertions(+), 26 deletions(-) diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 7842c3b781..31dc97239b 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -2694,23 +2694,12 @@ close_port(portid_t pid) continue; } - if (rte_atomic16_cmpset(&(port->port_status), - RTE_PORT_STOPPED, RTE_PORT_HANDLING) == 0) { - printf("Port %d is now not stopped\n", pi); - continue; - } - if (port->flow_list) port_flow_flush(pi); rte_eth_dev_close(pi); - - remove_invalid_ports(); - - if (rte_atomic16_cmpset(&(port->port_status), - RTE_PORT_HANDLING, RTE_PORT_CLOSED) == 0) - printf("Port %d cannot be set to closed\n", pi); } + remove_invalid_ports(); printf("Done\n"); } @@ -2841,12 +2830,7 @@ detach_device(struct rte_device *dev) return; } RTE_ETH_FOREACH_DEV_OF(sibling, dev) { - /* reset mapping between old ports and removed device */ - rte_eth_devices[sibling].device = NULL; if (ports[sibling].port_status != RTE_PORT_CLOSED) { - /* sibling ports are forced to be closed */ - ports[sibling].port_status = RTE_PORT_CLOSED; - printf("Port %u is closed\n", sibling); } } @@ -2902,11 +2886,8 @@ detach_devargs(char *identifier) return; } - /* sibling ports are forced to be closed */ if (ports[port_id].flow_list) port_flow_flush(port_id); - ports[port_id].port_status = RTE_PORT_CLOSED; - printf("Port %u is now closed\n", port_id); } } @@ -3055,12 +3036,6 @@ check_all_ports_link_status(uint32_t port_mask) } } -/* - * This callback is for remove a port for a device. It has limitation because - * it is not for multiple port removal for a device. - * TODO: the device detach invoke will plan to be removed from user side to - * eal. And convert all PMDs to free port resources on ether device closing. - */ static void rmv_port_callback(void *arg) { @@ -3118,6 +3093,13 @@ eth_event_callback(portid_t port_id, enum rte_eth_event_type type, void *param, rmv_port_callback, (void *)(intptr_t)port_id)) fprintf(stderr, "Could not set up deferred device removal\n"); break; + case RTE_ETH_EVENT_DESTROY: + if (rte_atomic16_cmpset(&(ports[port_id].port_status), + RTE_PORT_STOPPED, + RTE_PORT_CLOSED) == 0) + printf("Port %d cannot be set to closed\n", port_id); + printf("Port %u is closed\n", port_id); + break; default: break; } From patchwork Sun Sep 13 22:07:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 77569 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4458EA04C9; Mon, 14 Sep 2020 00:10:02 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 240B31C192; Mon, 14 Sep 2020 00:09:11 +0200 (CEST) Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) by dpdk.org (Postfix) with ESMTP id 83CE11C192 for ; Mon, 14 Sep 2020 00:09:09 +0200 (CEST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id 5CFF94A2; Sun, 13 Sep 2020 18:09:08 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 13 Sep 2020 18:09:08 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=1y6/fs8bu+lqK rLjaStWy2xeNQLaxhSBsY5e29Mqd/Y=; b=AAo47BcqjXltgfBLHp3S1dSW/rD/x 3XXBWEWgh5v/vFruFmYG7EfBb91NsYzZWF0EII89JqZiqS5FTznOwtxX/30UlZ1H iaMcLQiOmncwJhGGALX48+24xRh++jZBEVXRDGV8O9HnK4CkV47sHKc4vTFR43ia u9hxf8Bcci5id8Gj9+Oq9bYrC/RA1Wkq6B4e3CpJeC/1aGjOF8JMRgcRC7LZk9a7 I3l5iwjSh879IqwaHzSUWToYu/8wWwVrg43D5Om1R6RUE5sAv1CwLkQQc8bK3vgi 3sJ0k2L7LEawkzijgxCCGJZUKC29wF/OSXMjE3wS+UpAdxe4EaL2IfqVA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=1y6/fs8bu+lqKrLjaStWy2xeNQLaxhSBsY5e29Mqd/Y=; b=RkPNZUGg auJ3xBoCro6EL2Pkgr1EVh4XU8ndgWs07K4Ul6wsUwMR7p2FFKzRwbxH9ImIJ584 B3i2j4uFOR+D6NhIElqJCX3mH7AhWF4PSM9NZnV9vopIalMq4hcrpuVtQJCqvROb qB1lPMTAK6fJ7QSikctL9relbW4XgIkSlEICsnfaaUx9vxuhHe3Ku7FRp7zSj/Rw rKFR7qjFivUWEGb1ZYYnS9FkWlpoRzv6BkFDmahYeRxDJTPJn2dd9KJL62Tq+5tz Dluwa3W74byoesKKtbgg3TZMmQQG4GTSFODwd3aC30sVK44JdUSWRYyBNvivL0gy 3wFNeEBKrXybhA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeihedgtdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepvdehgfeivdejgedtveehfefhteelfefgieevgfffveefjeegtdfg uedthedtgeevnecukfhppeejjedrudefgedrvddtfedrudekgeenucevlhhushhtvghruf hiiigvpeduleenucfrrghrrghmpehmrghilhhfrhhomhepthhhohhmrghssehmohhnjhgr lhhonhdrnhgvth X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id 0FED33064674; Sun, 13 Sep 2020 18:09:06 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, arybchenko@solarflare.com, Wenzhuo Lu , Beilei Xing , Bernard Iremonger Date: Mon, 14 Sep 2020 00:07:11 +0200 Message-Id: <20200913220711.3768597-21-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200913220711.3768597-1-thomas@monjalon.net> References: <20200913220711.3768597-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 20/20] app/testpmd: align behaviour of multi-port detach 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" A port can be closed in multiple situations: - close command calling close_port() -> rte_eth_dev_close() - exit calling close_port() -> rte_eth_dev_close() - hotplug calling close_port() -> rte_eth_dev_close() - hotplug calling detach_device() -> rte_dev_remove() - port detach command, detach_device() -> rte_dev_remove() - device detach command, detach_devargs() -> rte_eal_hotplug_remove() The flow rules are flushed before each close. It was already done in close_port(), detach_devargs() and detach_port_device() which calls detach_device(), but not in detach_device(). As a consequence, it was missing for siblings of port detach command and unplugged device. The check before calling port_flow_flush() is moved inside the function. The state of the port to close is checked to be stopped. As above, this check was missing in detach_device(), impacting the cases of a multi-port device unplugged or detached with the port detach command. Signed-off-by: Thomas Monjalon --- app/test-pmd/config.c | 7 +++++-- app/test-pmd/testpmd.c | 22 +++++++++++----------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 30bee33248..21513a2978 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -1588,9 +1588,12 @@ int port_flow_flush(portid_t port_id) { struct rte_flow_error error; - struct rte_port *port; + struct rte_port *port = &ports[port_id]; int ret = 0; + if (port->flow_list == NULL) + return ret; + /* Poisoning to make sure PMDs update it in case of error. */ memset(&error, 0x44, sizeof(error)); if (rte_flow_flush(port_id, &error)) { @@ -1599,7 +1602,7 @@ port_flow_flush(portid_t port_id) port_id == (portid_t)RTE_PORT_ALL) return ret; } - port = &ports[port_id]; + while (port->flow_list) { struct port_flow *pf = port->flow_list->next; diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 31dc97239b..a76e9877f6 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -2694,8 +2694,7 @@ close_port(portid_t pid) continue; } - if (port->flow_list) - port_flow_flush(pi); + port_flow_flush(pi); rte_eth_dev_close(pi); } @@ -2825,15 +2824,20 @@ detach_device(struct rte_device *dev) printf("Removing a device...\n"); - if (rte_dev_remove(dev) < 0) { - TESTPMD_LOG(ERR, "Failed to detach device %s\n", dev->name); - return; - } RTE_ETH_FOREACH_DEV_OF(sibling, dev) { if (ports[sibling].port_status != RTE_PORT_CLOSED) { + if (ports[sibling].port_status != RTE_PORT_STOPPED) { + printf("Port %u not stopped\n", sibling); + return; + } + port_flow_flush(sibling); } } + if (rte_dev_remove(dev) < 0) { + TESTPMD_LOG(ERR, "Failed to detach device %s\n", dev->name); + return; + } remove_invalid_ports(); printf("Device is detached\n"); @@ -2854,8 +2858,6 @@ detach_port_device(portid_t port_id) return; } printf("Port was not closed\n"); - if (ports[port_id].flow_list) - port_flow_flush(port_id); } detach_device(rte_eth_devices[port_id].device); @@ -2885,9 +2887,7 @@ detach_devargs(char *identifier) rte_eth_iterator_cleanup(&iterator); return; } - - if (ports[port_id].flow_list) - port_flow_flush(port_id); + port_flow_flush(port_id); } }