From patchwork Fri Jun 21 09:40:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 55165 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id DCD761D5B7; Fri, 21 Jun 2019 11:41:06 +0200 (CEST) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [67.231.154.164]) by dpdk.org (Postfix) with ESMTP id 2433D1D59E for ; Fri, 21 Jun 2019 11:41:02 +0200 (CEST) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us5.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 0656040059 for ; Fri, 21 Jun 2019 09:41:01 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Fri, 21 Jun 2019 02:40:58 -0700 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Fri, 21 Jun 2019 02:40:58 -0700 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x5L9euq7017269 for ; Fri, 21 Jun 2019 10:40:56 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id C0FB01627D9 for ; Fri, 21 Jun 2019 10:40:56 +0100 (BST) From: Andrew Rybchenko To: Date: Fri, 21 Jun 2019 10:40:41 +0100 Message-ID: <1561110041-1795-3-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1561110041-1795-1-git-send-email-arybchenko@solarflare.com> References: <1561110041-1795-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24700.003 X-TM-AS-Result: No-5.639900-4.000000-10 X-TMASE-MatchedRID: UJMaQQ/7IySPIr9Wpu0YXFmLfdM9hQqXXGjQf7uckKtwkdIrVt8X1ciT Wug2C4DNBTL3N8yyT9ePQi9XuOWoOL+Q0YdVmuyWGjzBgnFZvQ7naaW2UTafyHQWhLVqLFM1SOo omvBCWS47zeNz8FPkumou+/m43UOmcvyW/4fez/f4KPASpfWnud1hWsVVuzNouM5RdaZDc5b+QW sESfdycuOrxWvuBMZud/05bzBJRR20A65es43yNp4CIKY/Hg3AGdQnQSTrKGPEQdG7H66TyH4gK q42LRYk1obWAjmoxR7E16ZF2/1tmrZ50OIlO4Uwe1wJQFIX/x1+3BndfXUhXQ== X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--5.639900-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24700.003 X-MDID: 1561110061-F_eZ15UCbEcb Subject: [dpdk-dev] [PATCH 3/3] net/sfc: 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" Set RTE_ETH_DEV_CLOSE_REMOVE upon probe so all the resources for the port can be freed by rte_eth_dev_close() and the ethdev port freed. Signed-off-by: Andrew Rybchenko Reviewed-by: Ivan Malov --- drivers/net/sfc/sfc_ethdev.c | 51 ++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 583f31b8c..279b58641 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -34,6 +34,10 @@ uint32_t sfc_logtype_driver; static struct sfc_dp_list sfc_dp_head = TAILQ_HEAD_INITIALIZER(sfc_dp_head); + +static void sfc_eth_dev_clear_ops(struct rte_eth_dev *dev); + + static int sfc_fw_version_get(struct rte_eth_dev *dev, char *fw_version, size_t fw_size) { @@ -335,9 +339,29 @@ sfc_dev_close(struct rte_eth_dev *dev) sfc_err(sa, "unexpected adapter state %u on close", sa->state); break; } + + /* + * Cleanup all resources in accordance with RTE_ETH_DEV_CLOSE_REMOVE. + * Rollback primary process sfc_eth_dev_init() below. + */ + + sfc_eth_dev_clear_ops(dev); + + sfc_detach(sa); + sfc_unprobe(sa); + + sfc_kvargs_cleanup(sa); + sfc_adapter_unlock(sa); + sfc_adapter_lock_fini(sa); sfc_log_init(sa, "done"); + + /* Required for logging, so cleanup last */ + sa->eth_dev = NULL; + + dev->process_private = NULL; + free(sa); } static void @@ -2123,6 +2147,8 @@ 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; @@ -2189,8 +2215,6 @@ sfc_eth_dev_init(struct rte_eth_dev *dev) static int sfc_eth_dev_uninit(struct rte_eth_dev *dev) { - struct sfc_adapter *sa; - if (rte_eal_process_type() != RTE_PROC_PRIMARY) { sfc_eth_dev_secondary_clear_ops(dev); return 0; @@ -2198,29 +2222,6 @@ sfc_eth_dev_uninit(struct rte_eth_dev *dev) sfc_dev_close(dev); - sa = sfc_adapter_by_eth_dev(dev); - sfc_log_init(sa, "entry"); - - sfc_adapter_lock(sa); - - sfc_eth_dev_clear_ops(dev); - - sfc_detach(sa); - sfc_unprobe(sa); - - sfc_kvargs_cleanup(sa); - - sfc_adapter_unlock(sa); - sfc_adapter_lock_fini(sa); - - sfc_log_init(sa, "done"); - - /* Required for logging, so cleanup last */ - sa->eth_dev = NULL; - - dev->process_private = NULL; - free(sa); - return 0; }