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) {