From patchwork Wed Oct 14 13:28:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 80730 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 D8B07A04B7; Wed, 14 Oct 2020 15:31:32 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 177A41DE1C; Wed, 14 Oct 2020 15:29:28 +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 151CC1DDC4 for ; Wed, 14 Oct 2020 15:29:19 +0200 (CEST) Received: from mx1-us1.ppe-hosted.com (unknown [10.110.50.150]) by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id AA32C200CC; Wed, 14 Oct 2020 13:29:17 +0000 (UTC) Received: from us4-mdac16-7.at1.mdlocal (unknown [10.110.49.174]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id A854E800A7; Wed, 14 Oct 2020 13:29:17 +0000 (UTC) X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.49.103]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 1A890100079; Wed, 14 Oct 2020 13:29:17 +0000 (UTC) Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id BDE4698007B; Wed, 14 Oct 2020 13:29:15 +0000 (UTC) Received: from ukex01.SolarFlarecom.com (10.17.10.4) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 14 Oct 2020 14:29:12 +0100 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 14 Oct 2020 14:29:12 +0100 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 09EDTAfq009116; Wed, 14 Oct 2020 14:29:10 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 40BDB1613A9; Wed, 14 Oct 2020 14:29:10 +0100 (BST) From: Andrew Rybchenko To: Ray Kinsella , Neil Horman , "Thomas Monjalon" , Ferruh Yigit , Andrew Rybchenko CC: , Ivan Ilchenko Date: Wed, 14 Oct 2020 14:28:56 +0100 Message-ID: <1602682146-4722-2-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> References: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.6.1012-25724.003 X-TM-AS-Result: No-1.238400-8.000000-10 X-TMASE-MatchedRID: xz5dUIpVk2xWSqhPlGB83xz2MDiYujy50mSc1YzbC53iYlKox3ryNARj Z4/TzBlyZcz/Uu/FtYOn93rCC6a9lnT3K3VineCfw9GVhGa/57Y/pOSL72dTfwdkFovAReUoilv Ab18i4hPcL9OnXn2+9aW+3hCtK6/nFMFUQi+pamFVXhlmZsTdjEqAhuLHn5fE2MwxXd5kM2EY8d fj5o9RIpsamEZjK8gS8kaXXEQhzj2KhA2hG2DTq0rM69p7lDSswwD0mzFpRreHX0cDZiY+DdpGx yJBq9LmNqJuRbVKGyWAMuqetGVetnyef22ep6XYro1URZJFbJtsFus3s9zpUXm5u95yjsiuCSnS 3fyfdR0RrylMHUEZ4smM7iBaipcjgzxA6OA+3HSSgNLsUaQePPXKSh9pUFrtZfUv9UxvY+zw7Jx wU0EvZMqEROLb/+yO4/0Jvn0rwAJmtL4Dw+zNb5hXfxzgoU6P X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--1.238400-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.6.1012-25724.003 X-MDID: 1602682157-RsglfFYIvzWf X-PPE-DISP: 1602682157;RsglfFYIvzWf Subject: [dpdk-dev] [PATCH 01/11] ethdev: change eth dev stop function to return int 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: Ivan Ilchenko Change rte_eth_dev_stop() return value from void to int and return negative errno values in case of error conditions. Also update the usage of the function in ethdev according to the new return type. Signed-off-by: Ivan Ilchenko Signed-off-by: Andrew Rybchenko Acked-by: Thomas Monjalon --- doc/guides/rel_notes/deprecation.rst | 1 - lib/librte_ethdev/rte_ethdev.c | 27 ++++++++++++++++++++------- lib/librte_ethdev/rte_ethdev.h | 2 +- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst index 584e720879..f0bf656b47 100644 --- a/doc/guides/rel_notes/deprecation.rst +++ b/doc/guides/rel_notes/deprecation.rst @@ -127,7 +127,6 @@ Deprecation Notices negative errno values to indicate various error conditions (e.g. invalid port ID, unsupported operation, failed operation): - - ``rte_eth_dev_stop`` - ``rte_eth_dev_close`` * ethdev: New offload flags ``DEV_RX_OFFLOAD_FLOW_MARK`` will be added in 19.11. diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index 5b7979a3b8..2226e429ba 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -1662,7 +1662,7 @@ rte_eth_dev_start(uint16_t port_id) struct rte_eth_dev *dev; struct rte_eth_dev_info dev_info; int diag; - int ret; + int ret, ret_stop; RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -EINVAL); @@ -1696,7 +1696,13 @@ rte_eth_dev_start(uint16_t port_id) RTE_ETHDEV_LOG(ERR, "Error during restoring configuration for device (port %u): %s\n", port_id, rte_strerror(-ret)); - rte_eth_dev_stop(port_id); + ret_stop = rte_eth_dev_stop(port_id); + if (ret_stop != 0) { + RTE_ETHDEV_LOG(ERR, + "Failed to stop device (port %u): %s\n", + port_id, rte_strerror(-ret_stop)); + } + return ret; } @@ -1709,26 +1715,28 @@ rte_eth_dev_start(uint16_t port_id) return 0; } -void +int rte_eth_dev_stop(uint16_t port_id) { struct rte_eth_dev *dev; - RTE_ETH_VALID_PORTID_OR_RET(port_id); + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); dev = &rte_eth_devices[port_id]; - RTE_FUNC_PTR_OR_RET(*dev->dev_ops->dev_stop); + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_stop, -ENOTSUP); if (dev->data->dev_started == 0) { RTE_ETHDEV_LOG(INFO, "Device with port_id=%"PRIu16" already stopped\n", port_id); - return; + return 0; } dev->data->dev_started = 0; (*dev->dev_ops->dev_stop)(dev); rte_ethdev_trace_stop(port_id); + + return 0; } int @@ -1784,7 +1792,12 @@ rte_eth_dev_reset(uint16_t port_id) RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_reset, -ENOTSUP); - rte_eth_dev_stop(port_id); + ret = rte_eth_dev_stop(port_id); + if (ret != 0) { + RTE_ETHDEV_LOG(ERR, + "Failed to stop device (port %u) before reset: %s - ignore\n", + port_id, rte_strerror(-ret)); + } ret = dev->dev_ops->dev_reset(dev); return eth_err(port_id, ret); diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h index f4cc5917b9..e8eedaf0af 100644 --- a/lib/librte_ethdev/rte_ethdev.h +++ b/lib/librte_ethdev/rte_ethdev.h @@ -2278,7 +2278,7 @@ int rte_eth_dev_start(uint16_t port_id); * @param port_id * The port identifier of the Ethernet device. */ -void rte_eth_dev_stop(uint16_t port_id); +int rte_eth_dev_stop(uint16_t port_id); /** * Link up an Ethernet device. From patchwork Wed Oct 14 13:28:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 80726 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 19502A04B7; Wed, 14 Oct 2020 15:29:56 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 0DBF81DDC3; Wed, 14 Oct 2020 15:29:20 +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 1550B1DDB3 for ; Wed, 14 Oct 2020 15:29:17 +0200 (CEST) Received: from mx1-us1.ppe-hosted.com (unknown [10.110.50.143]) by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 9D47B200E5; Wed, 14 Oct 2020 13:29:15 +0000 (UTC) Received: from us4-mdac16-57.at1.mdlocal (unknown [10.110.50.149]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 9C1538009B; Wed, 14 Oct 2020 13:29:15 +0000 (UTC) X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.49.103]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 2109C40075; Wed, 14 Oct 2020 13:29:15 +0000 (UTC) Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id DA078980079; Wed, 14 Oct 2020 13:29:14 +0000 (UTC) Received: from ukex01.SolarFlarecom.com (10.17.10.4) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 14 Oct 2020 14:29:11 +0100 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 14 Oct 2020 14:29:10 +0100 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 09EDTABH009123; Wed, 14 Oct 2020 14:29:10 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id D04541613AB; Wed, 14 Oct 2020 14:29:10 +0100 (BST) From: Andrew Rybchenko To: Nikhil Rao CC: , Ivan Ilchenko Date: Wed, 14 Oct 2020 14:28:57 +0100 Message-ID: <1602682146-4722-3-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> References: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.6.1012-25724.003 X-TM-AS-Result: No-2.201500-8.000000-10 X-TMASE-MatchedRID: qkiRFh4owgXRlxaUc/KTYX4neC0h7SAD3V4UShoTXaeYkF7ZtFfCUy35 5p3utdHTYHB0GcKFMluciIjEsRJMvgj05bgaOUOePwKTD1v8YV5MkOX0UoduuacxvibtoCq3EoN 4n3g9Rrb3QfInLPO01EtUPR8Cg9cKsvVIf1NvGi8XK/dRaOWlvZ8kBWlYDDNgmyiLZetSf8mfop 0ytGwvXiq2rl3dzGQ1K/VotTaQ+CaZl4qeoPyJbdcgb6Nmy7GW5eYKDwR+Vh7XEAGDZja0DOW+H ldS82QH13P+ghIFRwXQoo10HulECuEilx39ubn3sEjEMvNxMkI4oGQUCbwY5Q+g7mdwjo656FtD ZCmYBJ1Y8paICU20ju90JQgW5qyr X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10-2.201500-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.6.1012-25724.003 X-MDID: 1602682155-ydjny0DmJwtS X-PPE-DISP: 1602682155;ydjny0DmJwtS Subject: [dpdk-dev] [PATCH 02/11] test/event: check eth dev stop status 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: Ivan Ilchenko rte_eth_dev_stop() return value was changed from void to int, so this patch modify usage of this function across test/event according to new return type. Signed-off-by: Ivan Ilchenko Signed-off-by: Andrew Rybchenko --- app/test/test_event_eth_rx_adapter.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/app/test/test_event_eth_rx_adapter.c b/app/test/test_event_eth_rx_adapter.c index dd3bce71b8..60435b2faa 100644 --- a/app/test/test_event_eth_rx_adapter.c +++ b/app/test/test_event_eth_rx_adapter.c @@ -156,7 +156,9 @@ init_port_rx_intr(int num_ports) default_params.rx_intr_port = portid; return 0; } - rte_eth_dev_stop(portid); + retval = rte_eth_dev_stop(portid); + TEST_ASSERT(retval == 0, "Failed to stop port %u: %d\n", + portid, retval); } return 0; } @@ -479,8 +481,11 @@ adapter_multi_eth_add_del(void) /* stop eth devices for existing */ port_index = 0; - for (; port_index < rte_eth_dev_count_total(); port_index += 1) - rte_eth_dev_stop(port_index); + for (; port_index < rte_eth_dev_count_total(); port_index += 1) { + err = rte_eth_dev_stop(port_index); + TEST_ASSERT(err == 0, "Failed to stop port %u: %d\n", + port_index, err); + } /* add the max port for rx_adapter */ port_index = rte_eth_dev_count_total(); From patchwork Wed Oct 14 13:28:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 80727 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 AB1DFA04B7; Wed, 14 Oct 2020 15:30:18 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6F68B1DDD8; Wed, 14 Oct 2020 15:29:22 +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 56D0A1DDB6 for ; Wed, 14 Oct 2020 15:29:17 +0200 (CEST) Received: from mx1-us1.ppe-hosted.com (unknown [10.110.50.150]) by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id EA42220082; Wed, 14 Oct 2020 13:29:15 +0000 (UTC) Received: from us4-mdac16-62.at1.mdlocal (unknown [10.110.50.155]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id E90C4800A3; Wed, 14 Oct 2020 13:29:15 +0000 (UTC) X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.49.103]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 65C25100085; Wed, 14 Oct 2020 13:29:15 +0000 (UTC) Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 2CA8E98007C; Wed, 14 Oct 2020 13:29:15 +0000 (UTC) Received: from ukex01.SolarFlarecom.com (10.17.10.4) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 14 Oct 2020 14:29:11 +0100 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 14 Oct 2020 14:29:11 +0100 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 09EDTB6A009143; Wed, 14 Oct 2020 14:29:11 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 718E41613AB; Wed, 14 Oct 2020 14:29:11 +0100 (BST) From: Andrew Rybchenko To: Bruce Richardson CC: , Ivan Ilchenko Date: Wed, 14 Oct 2020 14:28:58 +0100 Message-ID: <1602682146-4722-4-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> References: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.6.1012-25724.003 X-TM-AS-Result: No-1.293300-8.000000-10 X-TMASE-MatchedRID: Y4ICLEyyxIvRlxaUc/KTYX4neC0h7SAD3V4UShoTXac7FE26mju9OwZe An7ANE0ajjj7xmhW6vgQlFkmdk3VOiHhSBQfglfsA9lly13c/gH4uJ1REX4MHWKuDy0kKGx0bOS TqgrdBFmK3EGc/DQ/3BIlVYCqhV5OHxPMjOKY7A8LbigRnpKlKZx+7GyJjhAUtK8zmvZOkW/NUZ AolFkycSe9MTX7LHA3Oq+vvL5bLdsaXeKprYDDUzzcblGQkvMawLqZeYlLQddkuPAFj76O+cEwY CsCjMTr5APDq2B3cAxn2JWP8qFf9FKehBzm9vnO5B2Qzud0EsJgO21BQaodlQ== X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--1.293300-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.6.1012-25724.003 X-MDID: 1602682155-KcskWrkOPA8K X-PPE-DISP: 1602682155;KcskWrkOPA8K Subject: [dpdk-dev] [PATCH 03/11] app: check eth dev stop status 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: Ivan Ilchenko rte_eth_dev_stop() return value was changed from void to int, so this patch modify usage of this function across app according to new return type. Signed-off-by: Ivan Ilchenko Signed-off-by: Andrew Rybchenko --- app/test/test_pmd_perf.c | 6 +++++- app/test/test_pmd_ring.c | 13 ++++++++++--- app/test/test_pmd_ring_perf.c | 3 ++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/app/test/test_pmd_perf.c b/app/test/test_pmd_perf.c index d1240b76f9..85c932c6dc 100644 --- a/app/test/test_pmd_perf.c +++ b/app/test/test_pmd_perf.c @@ -802,7 +802,11 @@ test_pmd_perf(void) if (socketid != rte_eth_dev_socket_id(portid)) continue; - rte_eth_dev_stop(portid); + ret = rte_eth_dev_stop(portid); + if (ret != 0) + rte_exit(EXIT_FAILURE, + "rte_eth_dev_stop: err=%s, port=%d\n", + rte_strerror(-ret), portid); } return 0; diff --git a/app/test/test_pmd_ring.c b/app/test/test_pmd_ring.c index 02873f26a1..b7af8f4b70 100644 --- a/app/test/test_pmd_ring.c +++ b/app/test/test_pmd_ring.c @@ -412,8 +412,14 @@ test_pmd_ring_pair_create_attach(void) return TEST_FAILED; } - rte_eth_dev_stop(rxtx_portd); - rte_eth_dev_stop(rxtx_porte); + if (rte_eth_dev_stop(rxtx_portd) != 0) { + printf("Error: failed to stop port %u\n", rxtx_portd); + return TEST_FAILED; + } + if (rte_eth_dev_stop(rxtx_porte) != 0) { + printf("Error: failed to stop port %u\n", rxtx_porte); + return TEST_FAILED; + } return TEST_SUCCESS; } @@ -522,7 +528,8 @@ test_command_line_ring_port(void) "test stats reset cmdl_port0 is failed"); TEST_ASSERT((test_get_stats(cmdl_port0) < 0), "test get stats cmdl_port0 is failed"); - rte_eth_dev_stop(cmdl_port0); + TEST_ASSERT((rte_eth_dev_stop(cmdl_port0) == 0), + "test stop cmdl_port0 is failed"); } return TEST_SUCCESS; } diff --git a/app/test/test_pmd_ring_perf.c b/app/test/test_pmd_ring_perf.c index 3b2ff9cb4f..d249b7de5f 100644 --- a/app/test/test_pmd_ring_perf.c +++ b/app/test/test_pmd_ring_perf.c @@ -155,7 +155,8 @@ test_ring_pmd_perf(void) test_bulk_enqueue_dequeue(); /* release port and ring resources */ - rte_eth_dev_stop(ring_ethdev_port); + if (rte_eth_dev_stop(ring_ethdev_port) != 0) + return -1; rte_eth_dev_get_name_by_port(ring_ethdev_port, name); rte_vdev_uninit(name); rte_ring_free(r); From patchwork Wed Oct 14 13:28:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 80728 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 1146AA04B7; Wed, 14 Oct 2020 15:30:46 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 17B881DDFE; Wed, 14 Oct 2020 15:29:25 +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 B92431DDB3 for ; Wed, 14 Oct 2020 15:29:17 +0200 (CEST) Received: from mx1-us1.ppe-hosted.com (unknown [10.110.50.150]) by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 5A101200AE; Wed, 14 Oct 2020 13:29:16 +0000 (UTC) Received: from us4-mdac16-3.at1.mdlocal (unknown [10.110.49.149]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 576A6800AD; Wed, 14 Oct 2020 13:29:16 +0000 (UTC) X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.49.103]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id B0F8A100071; Wed, 14 Oct 2020 13:29:15 +0000 (UTC) Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 729F8980079; Wed, 14 Oct 2020 13:29:15 +0000 (UTC) Received: from ukex01.SolarFlarecom.com (10.17.10.4) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 14 Oct 2020 14:29:12 +0100 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 14 Oct 2020 14:29:12 +0100 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 09EDTB6C009143; Wed, 14 Oct 2020 14:29:12 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 68F1B1613AB; Wed, 14 Oct 2020 14:29:12 +0100 (BST) From: Andrew Rybchenko To: Harry van Haaren , Ori Kam , Bruce Richardson , Radu Nicolau , Akhil Goyal , Ferruh Yigit , Sunil Kumar Kori , "Pavan Nikhilesh" , Jerin Jacob , Kiran Kumar K , Nithin Dabilpuram , David Hunt CC: , Ivan Ilchenko Date: Wed, 14 Oct 2020 14:28:59 +0100 Message-ID: <1602682146-4722-5-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> References: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.6.1012-25724.003 X-TM-AS-Result: No-1.587400-8.000000-10 X-TMASE-MatchedRID: tSbNnqEiYYHRlxaUc/KTYX4neC0h7SAD3V4UShoTXad+SLLtNOiBhhOv qWE4CGBUQ0ew+orY3L24HGCfl+dhoCHhSBQfglfsA9lly13c/gHpVMb1xnESMsnZhDdFIXZEOho 7xiBfL+dWqgnWQ924PCyCUGDXD74mbwFT1cZHxCHBe89zsi5D0NnLANiJ9J62T7zqZowzdpLSJJ cbp1Y+W8zub46theXNlup21Q6iopbcQUtYchmLP3V7tdtvoibawuIWIvQEbW7fc2Xd6VJ+ykTq5 x6JKmWROV0mD06qoXzvK3TBvg+vxe1KuqFSI2Ku+CjwEqX1p7kx/k92L7R8tkoPLn6eZ90+jG76 DvZqHwE7OJE/RLyfLuXcvHH+KGk9Q9tg+p38ZonHmyDJSEsI25yqUJ2uHKFAKBVvFbsUM5WSDdw 9v34fhC5Oh8YnEjIhgDLqnrRlXrZ8nn9tnqel2MZW5ai5WKlykrMXDgtoYrdRTufIbxRU/jhruI tukMy/TWkuGEI2K2m50N7mpEhr6SVF9Qp6e+qgwp07mfZ1DXpDtnTUorEyNAdh57FSns3r8Oycc FNBL2TKhETi2//sjuP9Cb59K8ACZrS+A8PszW/U9h9N881NSQ== X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--1.587400-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.6.1012-25724.003 X-MDID: 1602682156-0Gbl6edffxuP X-PPE-DISP: 1602682156;0Gbl6edffxuP Subject: [dpdk-dev] [PATCH 04/11] examples: check eth dev stop status 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: Ivan Ilchenko rte_eth_dev_stop() return value was changed from void to int, so this patch modify usage of this function across examples according to new return type. Signed-off-by: Ivan Ilchenko Signed-off-by: Andrew Rybchenko --- examples/ethtool/lib/rte_ethtool.c | 17 ++++++++++------- examples/eventdev_pipeline/main.c | 3 ++- examples/flow_filtering/main.c | 12 +++++++----- examples/ioat/ioatfwd.c | 5 ++++- examples/ipsec-secgw/event_helper.c | 7 ++++++- examples/ipsec-secgw/ipsec-secgw.c | 6 +++++- examples/kni/main.c | 28 +++++++++++++++++++++++----- examples/l2fwd-event/main.c | 10 ++++++++-- examples/l2fwd/main.c | 5 ++++- examples/l3fwd-graph/main.c | 6 +++++- examples/l3fwd-power/main.c | 6 +++++- examples/l3fwd/main.c | 10 ++++++++-- 12 files changed, 87 insertions(+), 28 deletions(-) diff --git a/examples/ethtool/lib/rte_ethtool.c b/examples/ethtool/lib/rte_ethtool.c index db8150efd5..78321b32ee 100644 --- a/examples/ethtool/lib/rte_ethtool.c +++ b/examples/ethtool/lib/rte_ethtool.c @@ -297,7 +297,11 @@ rte_ethtool_set_pauseparam(uint16_t port_id, int rte_ethtool_net_open(uint16_t port_id) { - rte_eth_dev_stop(port_id); + int ret; + + ret = rte_eth_dev_stop(port_id); + if (ret != 0) + return ret; return rte_eth_dev_start(port_id); } @@ -305,10 +309,7 @@ rte_ethtool_net_open(uint16_t port_id) int rte_ethtool_net_stop(uint16_t port_id) { - RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); - rte_eth_dev_stop(port_id); - - return 0; + return rte_eth_dev_stop(port_id); } int @@ -450,7 +451,7 @@ rte_ethtool_set_ringparam(uint16_t port_id, struct ethtool_ringparam *ring_param) { struct rte_eth_rxq_info rx_qinfo; - int stat; + int stat, ret; if (ring_param == NULL) return -EINVAL; @@ -459,7 +460,9 @@ rte_ethtool_set_ringparam(uint16_t port_id, if (stat != 0) return stat; - rte_eth_dev_stop(port_id); + ret = rte_eth_dev_stop(port_id); + if (ret != 0) + return ret; stat = rte_eth_tx_queue_setup(port_id, 0, ring_param->tx_pending, rte_socket_id(), NULL); diff --git a/examples/eventdev_pipeline/main.c b/examples/eventdev_pipeline/main.c index 4ac5821539..597540c3d6 100644 --- a/examples/eventdev_pipeline/main.c +++ b/examples/eventdev_pipeline/main.c @@ -296,7 +296,8 @@ signal_handler(int signum) RTE_ETH_FOREACH_DEV(portid) { rte_event_eth_rx_adapter_stop(portid); rte_event_eth_tx_adapter_stop(portid); - rte_eth_dev_stop(portid); + if (rte_eth_dev_stop(portid) < 0) + printf("Failed to stop port %u", portid); } rte_eal_mp_wait_lcore(); diff --git a/examples/flow_filtering/main.c b/examples/flow_filtering/main.c index cc9e7e7808..a92a4aa04e 100644 --- a/examples/flow_filtering/main.c +++ b/examples/flow_filtering/main.c @@ -52,7 +52,7 @@ print_ether_addr(const char *what, struct rte_ether_addr *eth_addr) printf("%s%s", what, buf); } -static void +static int main_loop(void) { struct rte_mbuf *mbufs[32]; @@ -61,6 +61,7 @@ main_loop(void) uint16_t nb_rx; uint16_t i; uint16_t j; + int ret; while (!force_quit) { for (i = 0; i < nr_queues; i++) { @@ -88,8 +89,11 @@ main_loop(void) /* closing and releasing resources */ rte_flow_flush(port_id, &error); - rte_eth_dev_stop(port_id); + ret = rte_eth_dev_stop(port_id); + if (ret < 0) + printf("Failed to stop port %u", port_id); rte_eth_dev_close(port_id); + return ret; } #define CHECK_INTERVAL 1000 /* 100ms */ @@ -254,7 +258,5 @@ main(int argc, char **argv) rte_exit(EXIT_FAILURE, "error in creating flow"); } - main_loop(); - - return 0; + return main_loop(); } diff --git a/examples/ioat/ioatfwd.c b/examples/ioat/ioatfwd.c index 8cf606e25b..73edb5da27 100644 --- a/examples/ioat/ioatfwd.c +++ b/examples/ioat/ioatfwd.c @@ -995,7 +995,10 @@ main(int argc, char **argv) uint32_t j; for (i = 0; i < cfg.nb_ports; i++) { printf("Closing port %d\n", cfg.ports[i].rxtx_port); - rte_eth_dev_stop(cfg.ports[i].rxtx_port); + ret = rte_eth_dev_stop(cfg.ports[i].rxtx_port); + if (ret != 0) + rte_exit(EXIT_FAILURE, "rte_eth_dev_stop: err=%s, port=%d\n", + rte_strerror(-ret), cfg.ports[i].rxtx_port); rte_eth_dev_close(cfg.ports[i].rxtx_port); if (copy_mode == COPY_MODE_IOAT_NUM) { for (j = 0; j < cfg.ports[i].nb_queues; j++) { diff --git a/examples/ipsec-secgw/event_helper.c b/examples/ipsec-secgw/event_helper.c index 865dc911b8..ce4dbdc085 100644 --- a/examples/ipsec-secgw/event_helper.c +++ b/examples/ipsec-secgw/event_helper.c @@ -1583,7 +1583,12 @@ eh_devs_init(struct eh_conf *conf) if ((conf->eth_portmask & (1 << port_id)) == 0) continue; - rte_eth_dev_stop(port_id); + ret = rte_eth_dev_stop(port_id); + if (ret != 0) { + EH_LOG_ERR("Failed to stop port %u, err: %d", + port_id, ret); + return ret; + } } /* Setup eventdev */ diff --git a/examples/ipsec-secgw/ipsec-secgw.c b/examples/ipsec-secgw/ipsec-secgw.c index 60132c4bd7..d83d9d8d5d 100644 --- a/examples/ipsec-secgw/ipsec-secgw.c +++ b/examples/ipsec-secgw/ipsec-secgw.c @@ -3032,7 +3032,11 @@ main(int32_t argc, char **argv) " for port %u, err msg: %s\n", portid, err.message); } - rte_eth_dev_stop(portid); + ret = rte_eth_dev_stop(portid); + if (ret != 0) + rte_exit(EXIT_FAILURE, "rte_eth_dev_stop: err=%s, port=%d\n", + rte_strerror(-ret), portid); + rte_eth_dev_close(portid); printf(" Done\n"); } diff --git a/examples/kni/main.c b/examples/kni/main.c index 2223bd367d..4998111d2c 100644 --- a/examples/kni/main.c +++ b/examples/kni/main.c @@ -782,7 +782,11 @@ kni_change_mtu_(uint16_t port_id, unsigned int new_mtu) RTE_LOG(INFO, APP, "Change MTU of port %d to %u\n", port_id, new_mtu); /* Stop specific port */ - rte_eth_dev_stop(port_id); + ret = rte_eth_dev_stop(port_id); + if (ret != 0) { + RTE_LOG(ERR, APP, "Failed to stop port %d\n", port_id); + return ret; + } memcpy(&conf, &port_conf, sizeof(conf)); /* Set new MTU */ @@ -875,10 +879,19 @@ kni_config_network_interface(uint16_t port_id, uint8_t if_up) rte_atomic32_inc(&kni_pause); if (if_up != 0) { /* Configure network interface up */ - rte_eth_dev_stop(port_id); + ret = rte_eth_dev_stop(port_id); + if (ret != 0) { + RTE_LOG(ERR, APP, "Failed to stop port %d\n", port_id); + return ret; + } ret = rte_eth_dev_start(port_id); - } else /* Configure network interface down */ - rte_eth_dev_stop(port_id); + } else { /* Configure network interface down */ + ret = rte_eth_dev_stop(port_id); + if (ret != 0) { + RTE_LOG(ERR, APP, "Failed to stop port %d\n", port_id); + return ret; + } + } rte_atomic32_dec(&kni_pause); @@ -998,6 +1011,7 @@ static int kni_free_kni(uint16_t port_id) { uint8_t i; + int ret; struct kni_port_params **p = kni_port_params_array; if (port_id >= RTE_MAX_ETHPORTS || !p[port_id]) @@ -1008,7 +1022,11 @@ kni_free_kni(uint16_t port_id) printf("Fail to release kni\n"); p[port_id]->kni[i] = NULL; } - rte_eth_dev_stop(port_id); + ret = rte_eth_dev_stop(port_id); + if (ret != 0) { + RTE_LOG(ERR, APP, "Failed to stop port %d\n", port_id); + return ret; + } return 0; } diff --git a/examples/l2fwd-event/main.c b/examples/l2fwd-event/main.c index 9f831b1266..ed60240083 100644 --- a/examples/l2fwd-event/main.c +++ b/examples/l2fwd-event/main.c @@ -683,7 +683,10 @@ main(int argc, char **argv) if ((rsrc->enabled_port_mask & (1 << port_id)) == 0) continue; - rte_eth_dev_stop(port_id); + ret = rte_eth_dev_stop(port_id); + if (ret < 0) + rte_panic("rte_eth_dev_stop:err=%d, port=%u\n", + ret, port_id); } rte_eal_mp_wait_lcore(); @@ -705,7 +708,10 @@ main(int argc, char **argv) (1 << port_id)) == 0) continue; printf("Closing port %d...", port_id); - rte_eth_dev_stop(port_id); + ret = rte_eth_dev_stop(port_id); + if (ret < 0) + rte_panic("rte_eth_dev_stop:err=%d, port=%u\n", + ret, port_id); rte_eth_dev_close(port_id); printf(" Done\n"); } diff --git a/examples/l2fwd/main.c b/examples/l2fwd/main.c index 7e3078788e..8d6c7ec237 100644 --- a/examples/l2fwd/main.c +++ b/examples/l2fwd/main.c @@ -896,7 +896,10 @@ main(int argc, char **argv) if ((l2fwd_enabled_port_mask & (1 << portid)) == 0) continue; printf("Closing port %d...", portid); - rte_eth_dev_stop(portid); + ret = rte_eth_dev_stop(portid); + if (ret != 0) + rte_exit(EXIT_FAILURE, "rte_eth_dev_stop: err=%d, port=%d\n", + ret, portid); rte_eth_dev_close(portid); printf(" Done\n"); } diff --git a/examples/l3fwd-graph/main.c b/examples/l3fwd-graph/main.c index 2306ba9b07..fbe680aa5d 100644 --- a/examples/l3fwd-graph/main.c +++ b/examples/l3fwd-graph/main.c @@ -1116,7 +1116,11 @@ main(int argc, char **argv) if ((enabled_port_mask & (1 << portid)) == 0) continue; printf("Closing port %d...", portid); - rte_eth_dev_stop(portid); + ret = rte_eth_dev_stop(portid); + if (ret != 0) { + printf("Failed to stop port %u: %s\n", + portid, rte_strerror(-ret)); + } rte_eth_dev_close(portid); printf(" Done\n"); } diff --git a/examples/l3fwd-power/main.c b/examples/l3fwd-power/main.c index d0e6c9bd77..b1535b2749 100644 --- a/examples/l3fwd-power/main.c +++ b/examples/l3fwd-power/main.c @@ -2805,7 +2805,11 @@ main(int argc, char **argv) if ((enabled_port_mask & (1 << portid)) == 0) continue; - rte_eth_dev_stop(portid); + ret = rte_eth_dev_stop(portid); + if (ret != 0) + RTE_LOG(ERR, L3FWD_POWER, "rte_eth_dev_stop: err=%d, port=%u\n", + ret, portid); + rte_eth_dev_close(portid); } diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c index 80f3434ec2..9094cbc4e2 100644 --- a/examples/l3fwd/main.c +++ b/examples/l3fwd/main.c @@ -1284,7 +1284,10 @@ main(int argc, char **argv) RTE_ETH_FOREACH_DEV(portid) { if ((enabled_port_mask & (1 << portid)) == 0) continue; - rte_eth_dev_stop(portid); + ret = rte_eth_dev_stop(portid); + if (ret != 0) + printf("rte_eth_dev_stop: err=%d, port=%u\n", + ret, portid); } rte_eal_mp_wait_lcore(); @@ -1304,7 +1307,10 @@ main(int argc, char **argv) if ((enabled_port_mask & (1 << portid)) == 0) continue; printf("Closing port %d...", portid); - rte_eth_dev_stop(portid); + ret = rte_eth_dev_stop(portid); + if (ret != 0) + printf("rte_eth_dev_stop: err=%d, port=%u\n", + ret, portid); rte_eth_dev_close(portid); printf(" Done\n"); } From patchwork Wed Oct 14 13:29:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 80729 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 A406EA04B7; Wed, 14 Oct 2020 15:31:05 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9C7961DE0E; Wed, 14 Oct 2020 15:29:26 +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 76A631DC5F for ; Wed, 14 Oct 2020 15:29:19 +0200 (CEST) Received: from mx1-us1.ppe-hosted.com (unknown [10.110.50.143]) by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 0BEA9200A3; Wed, 14 Oct 2020 13:29:18 +0000 (UTC) Received: from us4-mdac16-41.at1.mdlocal (unknown [10.110.48.12]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 0A6D4800A4; Wed, 14 Oct 2020 13:29:18 +0000 (UTC) X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.49.103]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id A5D584006E; Wed, 14 Oct 2020 13:29:17 +0000 (UTC) Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 6D2AB980079; Wed, 14 Oct 2020 13:29:17 +0000 (UTC) Received: from ukex01.SolarFlarecom.com (10.17.10.4) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 14 Oct 2020 14:29:13 +0100 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 14 Oct 2020 14:29:13 +0100 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 09EDTDRS009153; Wed, 14 Oct 2020 14:29:13 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 042AF1613A9; Wed, 14 Oct 2020 14:29:13 +0100 (BST) From: Andrew Rybchenko To: Chas Williams , "Min Hu (Connor)" CC: , Ivan Ilchenko Date: Wed, 14 Oct 2020 14:29:00 +0100 Message-ID: <1602682146-4722-6-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> References: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.6.1012-25724.003 X-TM-AS-Result: No-0.405100-8.000000-10 X-TMASE-MatchedRID: m3UrM73BECPRlxaUc/KTYX4neC0h7SAD3V4UShoTXacd0WOKRkwsh0kx APClfhN02tmoqiGUvaLMdHm3E7kFwCHhSBQfglfsA9lly13c/gGByxVkfd04JFIxScKXZnK0DYo fQuAXb7gq6gxfT+cErya6mjy4RIhP4bVbyN6yIMmeAiCmPx4NwBnUJ0Ek6yhjxEHRux+uk8ifEz J5hPndGam0BV2TFbmejQb7Vkb8wbM8rZW2vd/vhjpfqItxh6d1YjLe1QZG8KWb1QHd0ztRbxdJq bPoEknbXCp4jdlUfCWwBb8oDP+rdpN1JFeUKeMEiOOUXfTkScBZSbxIRLLN37zfneGoTKOTw8g2 HBNcF5k= X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10-0.405100-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.6.1012-25724.003 X-MDID: 1602682158-9IUDm_9Gak9z X-PPE-DISP: 1602682158;9IUDm_9Gak9z Subject: [dpdk-dev] [PATCH 05/11] net/bonding: check eth dev stop status 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: Ivan Ilchenko rte_eth_dev_stop() return value was changed from void to int, so this patch modify usage of this function across net/bonding according to new return type. Signed-off-by: Ivan Ilchenko Signed-off-by: Andrew Rybchenko --- drivers/net/bonding/rte_eth_bond_api.c | 7 ++++++- drivers/net/bonding/rte_eth_bond_pmd.c | 13 +++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c index a4007fe07c..55c8e3167c 100644 --- a/drivers/net/bonding/rte_eth_bond_api.c +++ b/drivers/net/bonding/rte_eth_bond_api.c @@ -237,7 +237,12 @@ slave_rte_flow_prepare(uint16_t slave_id, struct bond_dev_private *internals) uint16_t slave_port_id = internals->slaves[slave_id].port_id; if (internals->flow_isolated_valid != 0) { - rte_eth_dev_stop(slave_port_id); + if (rte_eth_dev_stop(slave_port_id) != 0) { + RTE_BOND_LOG(ERR, "Failed to stop device on port %u", + slave_port_id); + return -1; + } + if (rte_flow_isolate(slave_port_id, internals->flow_isolated, &ferror)) { RTE_BOND_LOG(ERR, "rte_flow_isolate failed for slave" diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index 1c404b2edd..6cb03d40d7 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -1694,7 +1694,12 @@ slave_configure(struct rte_eth_dev *bonded_eth_dev, struct bond_dev_private *internals = bonded_eth_dev->data->dev_private; /* Stop slave */ - rte_eth_dev_stop(slave_eth_dev->data->port_id); + errval = rte_eth_dev_stop(slave_eth_dev->data->port_id); + if (errval != 0) { + RTE_BOND_LOG(ERR, "rte_eth_dev_stop: port %u, err (%d)", + slave_eth_dev->data->port_id, errval); + return errval; + } /* Enable interrupts on slave device if supported */ if (slave_eth_dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC) @@ -2110,7 +2115,11 @@ bond_ethdev_close(struct rte_eth_dev *dev) while (internals->slave_count != skipped) { uint16_t port_id = internals->slaves[skipped].port_id; - rte_eth_dev_stop(port_id); + if (rte_eth_dev_stop(port_id) != 0) { + RTE_BOND_LOG(ERR, "Failed to stop device on port %u", + port_id); + skipped++; + } if (rte_eth_bond_slave_remove(bond_port_id, port_id) != 0) { RTE_BOND_LOG(ERR, From patchwork Wed Oct 14 13:29:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 80732 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 C95E9A04B7; Wed, 14 Oct 2020 15:32:18 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 2073E1DE41; Wed, 14 Oct 2020 15:29:31 +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 092451DDC4 for ; Wed, 14 Oct 2020 15:29:20 +0200 (CEST) Received: from mx1-us1.ppe-hosted.com (unknown [10.110.50.150]) by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id A4C0720081; Wed, 14 Oct 2020 13:29:18 +0000 (UTC) Received: from us4-mdac16-3.at1.mdlocal (unknown [10.110.49.149]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id A3AB1800A7; Wed, 14 Oct 2020 13:29:18 +0000 (UTC) X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.49.103]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 3C00E100061; Wed, 14 Oct 2020 13:29:18 +0000 (UTC) Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 01B78980087; Wed, 14 Oct 2020 13:29:18 +0000 (UTC) Received: from ukex01.SolarFlarecom.com (10.17.10.4) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 14 Oct 2020 14:29:13 +0100 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 14 Oct 2020 14:29:13 +0100 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 09EDTDiA009172; Wed, 14 Oct 2020 14:29:13 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 8199C1613A9; Wed, 14 Oct 2020 14:29:13 +0100 (BST) From: Andrew Rybchenko To: Ferruh Yigit CC: , Ivan Ilchenko Date: Wed, 14 Oct 2020 14:29:01 +0100 Message-ID: <1602682146-4722-7-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> References: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.6.1012-25724.003 X-TM-AS-Result: No-0.385100-8.000000-10 X-TMASE-MatchedRID: URRd+XkY8EzRlxaUc/KTYX4neC0h7SAD3V4UShoTXad+SLLtNOiBhiXD Fxgit6TpGTEKg4xHKqqbHAuQ1dUnuWJZXQNDzktSutvHF25zoU99LQinZ4QefCP/VFuTOXUT3n8 eBZjGmUzkwjHXXC/4I8ZW5ai5WKlypahlEGd2cKgUi0WYpBNca4IR4y5/iVfT+eaNSYcbybwkFC 1nhonUNv0dMi6c2n8KVCgdWKo6QUfnGeH1FLXFUEPKu+DloSNt8OyccFNBL2TKhETi2//sjuP9C b59K8ACZrS+A8PszW/U9h9N881NSQ== X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--0.385100-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.6.1012-25724.003 X-MDID: 1602682158-3T0QFdiK7guq X-PPE-DISP: 1602682158;3T0QFdiK7guq Subject: [dpdk-dev] [PATCH 06/11] kni: check eth dev stop status 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: Ivan Ilchenko rte_eth_dev_stop() return value was changed from void to int, so this patch modify usage of this function across kni according to new return type. Signed-off-by: Ivan Ilchenko Signed-off-by: Andrew Rybchenko --- app/test/test_kni.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/test/test_kni.c b/app/test/test_kni.c index e47ab36e02..931e8cb67e 100644 --- a/app/test/test_kni.c +++ b/app/test/test_kni.c @@ -755,7 +755,8 @@ test_kni(void) ret = 0; fail: - rte_eth_dev_stop(port_id); + if (rte_eth_dev_stop(port_id) != 0) + printf("Failed to stop port %u\n", port_id); return ret; } From patchwork Wed Oct 14 13:29:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 80731 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 E112EA04B7; Wed, 14 Oct 2020 15:31:54 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A02401DE2C; Wed, 14 Oct 2020 15:29:29 +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 6A9C81DDCF for ; Wed, 14 Oct 2020 15:29:20 +0200 (CEST) Received: from mx1-us1.ppe-hosted.com (unknown [10.110.50.150]) by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 14BF3200E0; Wed, 14 Oct 2020 13:29:19 +0000 (UTC) Received: from us4-mdac16-11.at1.mdlocal (unknown [10.110.49.193]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 0F878800AF; Wed, 14 Oct 2020 13:29:19 +0000 (UTC) X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.49.103]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 8016A100052; Wed, 14 Oct 2020 13:29:18 +0000 (UTC) Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 47257980087; Wed, 14 Oct 2020 13:29:18 +0000 (UTC) Received: from ukex01.SolarFlarecom.com (10.17.10.4) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 14 Oct 2020 14:29:14 +0100 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 14 Oct 2020 14:29:14 +0100 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 09EDTE6I009194; Wed, 14 Oct 2020 14:29:14 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 20C441613A9; Wed, 14 Oct 2020 14:29:14 +0100 (BST) From: Andrew Rybchenko To: Chas Williams , "Min Hu (Connor)" CC: , Ivan Ilchenko Date: Wed, 14 Oct 2020 14:29:02 +0100 Message-ID: <1602682146-4722-8-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> References: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.6.1012-25724.003 X-TM-AS-Result: No-4.089200-8.000000-10 X-TMASE-MatchedRID: cxaTYRzWUivRlxaUc/KTYX4neC0h7SAD3V4UShoTXaeYkF7ZtFfCU0kx APClfhN0YHB0GcKFMltFdYu4cV7ttyHhSBQfglfsA9lly13c/gHVoHA9HwvQm5wsUqEjZnPr2VC 1QWKKKPoRtfYWlraBqb5XOALI4JsjBOatfChdjHspJ8SpVT9O/3607foZgOWyJmE4A+qD79lZru EoKvBZSdXn8fbOSyKigF2CU61NPqQfE8yM4pjsDwtuKBGekqUpm+MB6kaZ2g7eWeTngWZnHRf+g QU4ZiK245RtQqwkfAAMHRdGyc5Bo65KZDnh0cOvqOA9Bck2vxPPPacHi4DkkHzd5FVSeyJMhNKJ okIvZoPkA8OrYHdwDGfYlY/yoV/0Up6EHOb2+c7kHZDO53QSwjflzkGcoK72 X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--4.089200-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.6.1012-25724.003 X-MDID: 1602682159-Jk0aP0AKZeYK X-PPE-DISP: 1602682159;Jk0aP0AKZeYK Subject: [dpdk-dev] [PATCH 07/11] test/bonding: check eth dev stop status 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: Ivan Ilchenko rte_eth_dev_stop() return value was changed from void to int, so this patch modify usage of this function across test/bonding according to new return type. Signed-off-by: Ivan Ilchenko Signed-off-by: Andrew Rybchenko --- app/test/test_link_bonding.c | 42 +++++++++++++++++++++------- app/test/test_link_bonding_mode4.c | 8 ++++-- app/test/test_link_bonding_rssconf.c | 3 +- 3 files changed, 40 insertions(+), 13 deletions(-) diff --git a/app/test/test_link_bonding.c b/app/test/test_link_bonding.c index 3a46f943f1..e8b76bd850 100644 --- a/app/test/test_link_bonding.c +++ b/app/test/test_link_bonding.c @@ -613,7 +613,9 @@ test_stop_bonded_device(void) struct rte_eth_link link_status; int retval; - rte_eth_dev_stop(test_params->bonded_port_id); + TEST_ASSERT_SUCCESS(rte_eth_dev_stop(test_params->bonded_port_id), + "Failed to stop bonded port %u", + test_params->bonded_port_id); retval = rte_eth_link_get(test_params->bonded_port_id, &link_status); TEST_ASSERT(retval >= 0, @@ -647,7 +649,10 @@ remove_slaves_and_stop_bonded_device(void) TEST_ASSERT_SUCCESS(test_remove_slave_from_bonded_device(), "test_remove_slave_from_bonded_device failed"); - rte_eth_dev_stop(test_params->bonded_port_id); + TEST_ASSERT_SUCCESS(rte_eth_dev_stop(test_params->bonded_port_id), + "Failed to stop bonded port %u", + test_params->bonded_port_id); + rte_eth_stats_reset(test_params->bonded_port_id); rte_eth_bond_mac_address_reset(test_params->bonded_port_id); @@ -755,7 +760,9 @@ test_set_primary_slave(void) test_params->slave_port_ids[i]); /* stop/start bonded eth dev to apply new MAC */ - rte_eth_dev_stop(test_params->bonded_port_id); + TEST_ASSERT_SUCCESS(rte_eth_dev_stop(test_params->bonded_port_id), + "Failed to stop bonded port %u", + test_params->bonded_port_id); TEST_ASSERT_SUCCESS(rte_eth_dev_start(test_params->bonded_port_id), "Failed to start bonded port %d", @@ -1024,7 +1031,10 @@ test_set_bonded_port_initialization_mac_assignment(void) slave_port_ids[2]), "failed to set primary port on bonded device."); - rte_eth_dev_stop(bonded_port_id); + TEST_ASSERT_SUCCESS(rte_eth_dev_stop(bonded_port_id), + "Failed to stop bonded port %u", + bonded_port_id); + TEST_ASSERT_SUCCESS(rte_eth_dev_start(bonded_port_id), "Failed to start bonded pmd eth device %d.", bonded_port_id); @@ -1063,7 +1073,9 @@ test_set_bonded_port_initialization_mac_assignment(void) * b - remove slave ethdevs * c - Verify slave ethdevs MACs are restored */ - rte_eth_dev_stop(bonded_port_id); + TEST_ASSERT_SUCCESS(rte_eth_dev_stop(bonded_port_id), + "Failed to stop bonded port %u", + bonded_port_id); for (i = 0; i < BONDED_INIT_MAC_ASSIGNMENT_SLAVE_COUNT; i++) { TEST_ASSERT_SUCCESS(rte_eth_bond_slave_remove(bonded_port_id, @@ -1769,7 +1781,9 @@ test_roundrobin_verify_mac_assignment(void) /* stop / start bonded device and verify that primary MAC address is * propagate to bonded device and slaves */ - rte_eth_dev_stop(test_params->bonded_port_id); + TEST_ASSERT_SUCCESS(rte_eth_dev_stop(test_params->bonded_port_id), + "Failed to stop bonded port %u", + test_params->bonded_port_id); TEST_ASSERT_SUCCESS(rte_eth_dev_start(test_params->bonded_port_id), "Failed to start bonded device"); @@ -2404,7 +2418,9 @@ test_activebackup_verify_mac_assignment(void) /* stop / start bonded device and verify that primary MAC address is * propagated to bonded device and slaves */ - rte_eth_dev_stop(test_params->bonded_port_id); + TEST_ASSERT_SUCCESS(rte_eth_dev_stop(test_params->bonded_port_id), + "Failed to stop bonded port %u", + test_params->bonded_port_id); TEST_ASSERT_SUCCESS(rte_eth_dev_start(test_params->bonded_port_id), "Failed to start device"); @@ -3335,7 +3351,9 @@ test_balance_verify_mac_assignment(void) /* stop / start bonded device and verify that primary MAC address is * propagated to bonded device and slaves */ - rte_eth_dev_stop(test_params->bonded_port_id); + TEST_ASSERT_SUCCESS(rte_eth_dev_stop(test_params->bonded_port_id), + "Failed to stop bonded port %u", + test_params->bonded_port_id); TEST_ASSERT_SUCCESS(rte_eth_dev_start(test_params->bonded_port_id), "Failed to start bonded device"); @@ -3932,7 +3950,9 @@ test_broadcast_verify_mac_assignment(void) /* stop / start bonded device and verify that primary MAC address is * propagated to bonded device and slaves */ - rte_eth_dev_stop(test_params->bonded_port_id); + TEST_ASSERT_SUCCESS(rte_eth_dev_stop(test_params->bonded_port_id), + "Failed to stop bonded port %u", + test_params->bonded_port_id); TEST_ASSERT_SUCCESS(rte_eth_dev_start(test_params->bonded_port_id), "Failed to start bonded device"); @@ -4472,7 +4492,9 @@ test_tlb_verify_mac_assignment(void) /* stop / start bonded device and verify that primary MAC address is * propagated to bonded device and slaves */ - rte_eth_dev_stop(test_params->bonded_port_id); + TEST_ASSERT_SUCCESS(rte_eth_dev_stop(test_params->bonded_port_id), + "Failed to stop bonded port %u", + test_params->bonded_port_id); TEST_ASSERT_SUCCESS(rte_eth_dev_start(test_params->bonded_port_id), "Failed to start device"); diff --git a/app/test/test_link_bonding_mode4.c b/app/test/test_link_bonding_mode4.c index cf12f026dd..2c835fa7ad 100644 --- a/app/test/test_link_bonding_mode4.c +++ b/app/test/test_link_bonding_mode4.c @@ -355,7 +355,9 @@ remove_slaves_and_stop_bonded_device(void) uint16_t slaves[RTE_MAX_ETHPORTS]; uint16_t i; - rte_eth_dev_stop(test_params.bonded_port_id); + TEST_ASSERT_SUCCESS(rte_eth_dev_stop(test_params.bonded_port_id), + "Failed to stop bonded port %u", + test_params.bonded_port_id); FOR_EACH_SLAVE(i, slave) remove_slave(slave); @@ -368,7 +370,9 @@ remove_slaves_and_stop_bonded_device(void) test_params.bonded_port_id, retval); FOR_EACH_PORT(i, slave) { - rte_eth_dev_stop(slave->port_id); + TEST_ASSERT_SUCCESS(rte_eth_dev_stop(slave->port_id), + "Failed to stop bonded port %u", + slave->port_id); TEST_ASSERT(slave->bonded == 0, "Port id=%u is still marked as enslaved.", slave->port_id); diff --git a/app/test/test_link_bonding_rssconf.c b/app/test/test_link_bonding_rssconf.c index 1a9571e5c6..5dac60ca1e 100644 --- a/app/test/test_link_bonding_rssconf.c +++ b/app/test/test_link_bonding_rssconf.c @@ -176,7 +176,8 @@ static int remove_slaves_and_stop_bonded_device(void) { TEST_ASSERT_SUCCESS(remove_slaves(), "Removing slaves"); - rte_eth_dev_stop(test_params.bond_port_id); + TEST_ASSERT_SUCCESS(rte_eth_dev_stop(test_params.bond_port_id), + "Failed to stop port %u", test_params.bond_port_id); return TEST_SUCCESS; } From patchwork Wed Oct 14 13:29:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 80733 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 7D15EA04B7; Wed, 14 Oct 2020 15:32:40 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 978E51DE49; Wed, 14 Oct 2020 15:29:32 +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 217161DDCF for ; Wed, 14 Oct 2020 15:29:21 +0200 (CEST) Received: from mx1-us1.ppe-hosted.com (unknown [10.110.50.150]) by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id C340620058; Wed, 14 Oct 2020 13:29:19 +0000 (UTC) Received: from us4-mdac16-4.at1.mdlocal (unknown [10.110.49.155]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id C08BC800A3; Wed, 14 Oct 2020 13:29:19 +0000 (UTC) X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.49.103]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 5BF0210007D; Wed, 14 Oct 2020 13:29:19 +0000 (UTC) Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 22F4F98008C; Wed, 14 Oct 2020 13:29:19 +0000 (UTC) Received: from ukex01.SolarFlarecom.com (10.17.10.4) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 14 Oct 2020 14:29:14 +0100 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 14 Oct 2020 14:29:14 +0100 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 09EDTEvL009201; Wed, 14 Oct 2020 14:29:14 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id A14C41613A9; Wed, 14 Oct 2020 14:29:14 +0100 (BST) From: Andrew Rybchenko To: Wisam Jaddo CC: , Ivan Ilchenko Date: Wed, 14 Oct 2020 14:29:03 +0100 Message-ID: <1602682146-4722-9-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> References: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.6.1012-25724.003 X-TM-AS-Result: No-0.990600-8.000000-10 X-TMASE-MatchedRID: 3VvmmxedNeLRlxaUc/KTYX4neC0h7SAD3V4UShoTXac7FE26mju9OwZe An7ANE0amASPBg63wn37QvycQTEpnyxppiUy9o4cA9lly13c/gE0VTU7yL3Dk14KJoYT5MRLo8W MkQWv6iUoTQl7wNH8Pg1fA1QHegDv3QfwsVk0UbvqwGfCk7KUsyKnZ6UtQNAzqcHfMsna70Ei3n PzECRbB1Y1JbYvTyyz7JXZM5vNDWQkB8rXzsl2wvtho07haoPRTjMziwQ1+EMIgqgxbVS+JQ9cv Ed/Et5dVEc5IqztENReYfSkFq6uAb7jE6+wkCSeftwZ3X11IV0= X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--0.990600-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.6.1012-25724.003 X-MDID: 1602682159-UYb8oZsiSsdi X-PPE-DISP: 1602682159;UYb8oZsiSsdi Subject: [dpdk-dev] [PATCH 08/11] app/flow-perf: check eth dev stop status 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: Ivan Ilchenko rte_eth_dev_stop() return value was changed from void to int, so this patch modify usage of this function across app/flow-perf according to new return type. Signed-off-by: Ivan Ilchenko Signed-off-by: Andrew Rybchenko Acked-by: Wisam Jaddo --- app/test-flow-perf/main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/test-flow-perf/main.c b/app/test-flow-perf/main.c index c420da6a57..2189b945de 100644 --- a/app/test-flow-perf/main.c +++ b/app/test-flow-perf/main.c @@ -1450,7 +1450,8 @@ main(int argc, char **argv) RTE_ETH_FOREACH_DEV(port) { rte_flow_flush(port, &error); - rte_eth_dev_stop(port); + if (rte_eth_dev_stop(port) != 0) + printf("Failed to stop device on port %u\n", port); rte_eth_dev_close(port); } return 0; From patchwork Wed Oct 14 13:29:04 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 80735 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 A290CA04B7; Wed, 14 Oct 2020 15:33:26 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 76D821DE5B; Wed, 14 Oct 2020 15:29:35 +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 AE6C41DDEF for ; Wed, 14 Oct 2020 15:29:21 +0200 (CEST) Received: from mx1-us1.ppe-hosted.com (unknown [10.110.50.143]) by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 4C600200B1; Wed, 14 Oct 2020 13:29:20 +0000 (UTC) Received: from us4-mdac16-31.at1.mdlocal (unknown [10.110.49.215]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 443428009B; Wed, 14 Oct 2020 13:29:20 +0000 (UTC) X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.49.103]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id E63AA4007C; Wed, 14 Oct 2020 13:29:19 +0000 (UTC) Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id AC9AF980081; Wed, 14 Oct 2020 13:29:19 +0000 (UTC) Received: from ukex01.SolarFlarecom.com (10.17.10.4) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 14 Oct 2020 14:29:15 +0100 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 14 Oct 2020 14:29:15 +0100 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 09EDTFAq009209; Wed, 14 Oct 2020 14:29:15 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 2229D1613A9; Wed, 14 Oct 2020 14:29:15 +0100 (BST) From: Andrew Rybchenko To: Wenzhuo Lu , Beilei Xing , Bernard Iremonger CC: , Ivan Ilchenko Date: Wed, 14 Oct 2020 14:29:04 +0100 Message-ID: <1602682146-4722-10-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> References: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.6.1012-25724.003 X-TM-AS-Result: No-1.548700-8.000000-10 X-TMASE-MatchedRID: bPLNq/JhYEHRlxaUc/KTYX4neC0h7SAD3V4UShoTXac7FE26mju9OwZe An7ANE0aGTEKg4xHKqqbHAuQ1dUnuWJZXQNDzktS+CjwEqX1p7l9LQinZ4QefOYQ3zcXToXr+gt Hj7OwNO2OhzOa6g8KrXDcLRjjdV22tz3xEVh9B6qyKVec2b7IwIi466djQy7oFo9Ftj+jagxHN/ DvAy6dYmZyoDy6bovPH3xQqAsUb83kMGn227LhCYXXmHr+iJs1sqxYnjga4QY83Fq7f38GK0XAd maT51YybiPTBhvbLhaUTGVAhB5EbQ== X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--1.548700-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.6.1012-25724.003 X-MDID: 1602682160-aM4iki7p5VvP X-PPE-DISP: 1602682160;aM4iki7p5VvP Subject: [dpdk-dev] [PATCH 09/11] app/testpmd: check eth dev stop status 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: Ivan Ilchenko rte_eth_dev_stop() return value was changed from void to int, so this patch modify usage of this function across app/testpmd according to new return type. Signed-off-by: Ivan Ilchenko Signed-off-by: Andrew Rybchenko --- app/test-pmd/testpmd.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index ccba71c076..84dedcf919 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -2628,7 +2628,9 @@ stop_port(portid_t pid) RTE_PORT_HANDLING) == 0) continue; - rte_eth_dev_stop(pi); + if (rte_eth_dev_stop(pi) != 0) + RTE_LOG(ERR, EAL, "rte_eth_dev_stop failed for port %u\n", + pi); if (rte_atomic16_cmpset(&(port->port_status), RTE_PORT_HANDLING, RTE_PORT_STOPPED) == 0) From patchwork Wed Oct 14 13:29:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 80734 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 14EF8A04B7; Wed, 14 Oct 2020 15:33:03 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 1D6251DE53; Wed, 14 Oct 2020 15:29:34 +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 4CBCC1DDD4 for ; Wed, 14 Oct 2020 15:29:22 +0200 (CEST) Received: from mx1-us1.ppe-hosted.com (unknown [10.110.50.137]) by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id EF1B920080; Wed, 14 Oct 2020 13:29:20 +0000 (UTC) Received: from us4-mdac16-33.at1.mdlocal (unknown [10.110.49.217]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id ED3496009B; Wed, 14 Oct 2020 13:29:20 +0000 (UTC) X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.49.103]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 81CCF220075; Wed, 14 Oct 2020 13:29:20 +0000 (UTC) Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 42E83980090; Wed, 14 Oct 2020 13:29:20 +0000 (UTC) Received: from ukex01.SolarFlarecom.com (10.17.10.4) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 14 Oct 2020 14:29:15 +0100 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 14 Oct 2020 14:29:15 +0100 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 09EDTF1U009235; Wed, 14 Oct 2020 14:29:15 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 982451613A9; Wed, 14 Oct 2020 14:29:15 +0100 (BST) From: Andrew Rybchenko To: Gaetan Rivet CC: , Ivan Ilchenko Date: Wed, 14 Oct 2020 14:29:05 +0100 Message-ID: <1602682146-4722-11-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> References: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.6.1012-25724.003 X-TM-AS-Result: No-3.265200-8.000000-10 X-TMASE-MatchedRID: Y4ICLEyyxIvRlxaUc/KTYX4neC0h7SAD3V4UShoTXacd0WOKRkwsh2hk SwpykoqVx/C5Mf1iTDw+ikRlw7XhPCHhSBQfglfsA9lly13c/gExXH/dlhvLv1IxScKXZnK0g7l N9LOvFDuuOtzV1CQbqrlxRECWghM+HxPMjOKY7A8LbigRnpKlKZvjAepGmdoOkPgjrRFGkyPM+9 aV5RHc55jyROJKvfE9Pr7ekwNTheDgk5SW3bNpIdOOGfL2azvqgAPCi7P++EXyJoj4yMzjay+Ds OUcVO6j5APDq2B3cAxn2JWP8qFf9FKehBzm9vnO5B2Qzud0EsLj5cAllduzaw== X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10-3.265200-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.6.1012-25724.003 X-MDID: 1602682161-dfXjrslETUoE X-PPE-DISP: 1602682161;dfXjrslETUoE Subject: [dpdk-dev] [PATCH 10/11] net/failsafe: check eth dev stop status 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: Ivan Ilchenko rte_eth_dev_stop() return value was changed from void to int, so this patch modify usage of this function across net/failsafe according to new return type. Signed-off-by: Ivan Ilchenko Signed-off-by: Andrew Rybchenko --- drivers/net/failsafe/failsafe_ether.c | 4 +++- drivers/net/failsafe/failsafe_ops.c | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/net/failsafe/failsafe_ether.c b/drivers/net/failsafe/failsafe_ether.c index f18935a7e2..f259755806 100644 --- a/drivers/net/failsafe/failsafe_ether.c +++ b/drivers/net/failsafe/failsafe_ether.c @@ -282,7 +282,9 @@ fs_dev_remove(struct sub_device *sdev) switch (sdev->state) { case DEV_STARTED: failsafe_rx_intr_uninstall_subdevice(sdev); - rte_eth_dev_stop(PORT_ID(sdev)); + ret = rte_eth_dev_stop(PORT_ID(sdev)); + if (ret < 0) + ERROR("Failed to stop device %u", PORT_ID(sdev)); sdev->state = DEV_ACTIVE; /* fallthrough */ case DEV_ACTIVE: diff --git a/drivers/net/failsafe/failsafe_ops.c b/drivers/net/failsafe/failsafe_ops.c index 0ce7dfc8a6..4fbb7e1da0 100644 --- a/drivers/net/failsafe/failsafe_ops.c +++ b/drivers/net/failsafe/failsafe_ops.c @@ -147,7 +147,9 @@ fs_dev_start(struct rte_eth_dev *dev) if (ret) { if (!fs_err(sdev, ret)) continue; - rte_eth_dev_stop(PORT_ID(sdev)); + if (rte_eth_dev_stop(PORT_ID(sdev)) < 0) + ERROR("Failed to stop device %u", + PORT_ID(sdev)); fs_unlock(dev, 0); return ret; } From patchwork Wed Oct 14 13:29:06 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 80736 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 56C79A04C0; Wed, 14 Oct 2020 15:34:00 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id B6B841DE73; Wed, 14 Oct 2020 15:29:41 +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 091801DE72 for ; Wed, 14 Oct 2020 15:29:40 +0200 (CEST) Received: from mx1-us1.ppe-hosted.com (unknown [10.110.50.137]) by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id A27C3200A7; Wed, 14 Oct 2020 13:29:38 +0000 (UTC) Received: from us4-mdac16-8.at1.mdlocal (unknown [10.110.49.190]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 9DC33600A1; Wed, 14 Oct 2020 13:29:38 +0000 (UTC) X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.50.12]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 02DA3220073; Wed, 14 Oct 2020 13:29:37 +0000 (UTC) Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 6E31240069; Wed, 14 Oct 2020 13:29:36 +0000 (UTC) Received: from ukex01.SolarFlarecom.com (10.17.10.4) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 14 Oct 2020 14:29:31 +0100 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 14 Oct 2020 14:29:31 +0100 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 09EDTUtd009457; Wed, 14 Oct 2020 14:29:30 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 7AEE61613A9; Wed, 14 Oct 2020 14:29:30 +0100 (BST) From: Andrew Rybchenko To: "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 , "Min Hu (Connor)" , Rahul Lakkireddy , Hemant Agrawal , Sachin Saxena , Jeff Guo , Haiyue Wang , 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 , "Wei Hu (Xavier)" , Yisen Zhuang , Beilei Xing , Jingjing Wu , Qiming Yang , "Alfredo Cardigliano" , Rosen Xu , "Ferruh Yigit" , Shijith Thotton , Srisivasubramanian Srinivasan , Matan Azrad , Shahaf Shuler , Viacheslav Ovsiienko , Zyta Szpak , Liron Himi , Stephen Hemminger , "K. Y. Srinivasan" , Haiyang Zhang , Long Li , Martin Spinler , Heinrich Kuhn , Tetsuya Mukawa , Harman Kalra , Jerin Jacob , Nithin Dabilpuram , "Kiran Kumar K" , Akhil Goyal , "Bruce Richardson" , Andrew Rybchenko , Jasvinder Singh , Cristian Dumitrescu , Keith Wiles , Maciej Czekaj , "Maxime Coquelin" , Chenbo Xia , Zhihong Wang , Yong Wang , Thomas Monjalon CC: , Ivan Ilchenko Date: Wed, 14 Oct 2020 14:29:06 +0100 Message-ID: <1602682146-4722-12-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> References: <1602682146-4722-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.6.1012-25724.003 X-TM-AS-Result: No-2.547000-8.000000-10 X-TMASE-MatchedRID: KjD1bwMIPIXed0Ij9t5iQzKVTrGMDe/Dkos2tunL8DRjLp8Cm8vwF4gg kHfdF/Q7/7yMlJ1P+1GF0jPFsyHqkqPKM9uZBgjQNVRz+HwqL4JUE+MH85/4VB3RY4pGTCyHiiG PD3c6GvPTQUky8ZUXixqIdIVY5XOMaLxhTaCJKI9l1tleYYUuJ0loPruIq9jTBph69XjMbdlAHO g8qEtqyI+pAn19BHXOieYnNKQobKjTLBkSptG5BHYZxYoZm58FBnIRIVcCWN9SMUnCl2ZytO1vA bHwESsvl78RAUnUG5BF0kv+vQOmAPr252PTOmm/R/j040fRFpJezmeoa8MJ88c322cceBeE+L9A 4dCyMAmVdIB0POZpBEqNKUpOIfRVoqIp1AUZB5pbUzvsaHW6BpyqUJ2uHKFAGiPTaHrEWqtaKkw DKTo9epsVl52/xwxWrIptOCER/1Qxsx3JLN9uSdWxbZgaqhS0nyQFaVgMM2Akt9BigJAcVlEZyU 8Gd0ltO7qZrIf3RB865445dm2p7vMNTbjUKZM+iuSat/QiCL/cVi8qZmJWc8l8NQ3m2sq+K6NgX i8D7QjXeeMBHC4RLRit2OqfFZiN/tD68K83xzEItCy6ZX/lL16jQb5UCjKvHqeNNK3aTgs2cMRU lQA/SCh8K4oQqYti+SeTfgGow2ShH8B3MoM2HThiciQR/+DQVy6w8Jlyem9OYKg2RiOqwK6+UxO Bi85NlUkoMluWRiu2ZXRrhevIbw8yX10hoKvgWTGejGdB9VIiyyRgkoGSpLgTRNqJwiybxkQQLA VT64DUcudweDCu/fXJ9pFdsVEg77tDC75bYg6eAiCmPx4NwJuJ+Pb8n/VxSnQ4MjwaO9cqtq5d3 cxkNY3vcDTzyGs12kC7SwvGlKhDwb7Jglhh1lFkOwaJdCKgGObbx/Uctjc= X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--2.547000-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.6.1012-25724.003 X-MDID: 1602682177-gyiJkIXZzqCQ X-PPE-DISP: 1602682177;gyiJkIXZzqCQ Subject: [dpdk-dev] [PATCH 11/11] ethdev: change stop device callback to return int 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: Ivan Ilchenko Change eth_dev_stop_t return value from void to int. Make eth_dev_stop_t implementations across all drivers to return negative errno values if case of error conditions. Signed-off-by: Ivan Ilchenko Signed-off-by: Andrew Rybchenko --- app/test/virtual_pmd.c | 4 ++- drivers/net/af_packet/rte_eth_af_packet.c | 3 +- drivers/net/af_xdp/rte_eth_af_xdp.c | 3 +- drivers/net/ark/ark_ethdev.c | 8 +++-- drivers/net/atlantic/atl_ethdev.c | 11 +++++-- drivers/net/avp/avp_ethdev.c | 6 ++-- drivers/net/axgbe/axgbe_ethdev.c | 8 +++-- drivers/net/bnx2x/bnx2x_ethdev.c | 6 ++-- drivers/net/bnxt/bnxt_ethdev.c | 17 ++++++++--- drivers/net/bnxt/bnxt_reps.c | 15 ++++++--- drivers/net/bnxt/bnxt_reps.h | 4 +-- drivers/net/bonding/eth_bond_private.h | 2 +- drivers/net/bonding/rte_eth_bond_pmd.c | 21 +++++++++---- drivers/net/cxgbe/cxgbe_ethdev.c | 6 ++-- drivers/net/cxgbe/cxgbe_pfvf.h | 2 +- drivers/net/dpaa/dpaa_ethdev.c | 11 +++++-- drivers/net/dpaa2/dpaa2_ethdev.c | 6 ++-- drivers/net/e1000/em_ethdev.c | 15 ++++++--- drivers/net/e1000/igb_ethdev.c | 26 +++++++++++----- drivers/net/ena/ena_ethdev.c | 14 ++++++--- drivers/net/enetc/enetc_ethdev.c | 9 ++++-- drivers/net/enic/enic_ethdev.c | 6 ++-- drivers/net/enic/enic_vf_representor.c | 6 ++-- drivers/net/failsafe/failsafe_ops.c | 23 +++++++++++--- drivers/net/fm10k/fm10k_ethdev.c | 11 +++++-- drivers/net/hinic/hinic_pmd_ethdev.c | 11 +++++-- drivers/net/hns3/hns3_ethdev.c | 12 ++++++-- drivers/net/hns3/hns3_ethdev_vf.c | 12 ++++++-- drivers/net/i40e/i40e_ethdev.c | 12 +++++--- drivers/net/i40e/i40e_ethdev_vf.c | 13 +++++--- drivers/net/i40e/i40e_vf_representor.c | 3 +- drivers/net/iavf/iavf_ethdev.c | 13 ++++++-- drivers/net/ice/ice_dcf_ethdev.c | 6 ++-- drivers/net/ice/ice_ethdev.c | 13 +++++--- drivers/net/igc/igc_ethdev.c | 14 ++++++--- drivers/net/ionic/ionic_ethdev.c | 6 ++-- drivers/net/ipn3ke/ipn3ke_representor.c | 4 ++- drivers/net/ixgbe/ixgbe_ethdev.c | 37 ++++++++++++++--------- drivers/net/ixgbe/ixgbe_vf_representor.c | 3 +- drivers/net/kni/rte_eth_kni.c | 13 ++++++-- drivers/net/liquidio/lio_ethdev.c | 20 +++++++++--- drivers/net/mlx4/mlx4.c | 8 +++-- drivers/net/mlx5/mlx5.h | 2 +- drivers/net/mlx5/mlx5_trigger.c | 4 ++- drivers/net/mvneta/mvneta_ethdev.c | 15 ++++++--- drivers/net/mvpp2/mrvl_ethdev.c | 4 +-- drivers/net/netvsc/hn_ethdev.c | 8 +++-- drivers/net/netvsc/hn_var.h | 2 +- drivers/net/netvsc/hn_vf.c | 13 ++++++-- drivers/net/nfb/nfb_ethdev.c | 9 ++++-- drivers/net/nfp/nfp_net.c | 6 ++-- drivers/net/null/rte_eth_null.c | 6 ++-- drivers/net/octeontx/octeontx_ethdev.c | 10 +++--- drivers/net/octeontx2/otx2_ethdev.c | 4 ++- drivers/net/pcap/rte_eth_pcap.c | 4 ++- drivers/net/pfe/pfe_ethdev.c | 16 +++++++--- drivers/net/qede/qede_ethdev.c | 14 ++++++--- drivers/net/ring/rte_eth_ring.c | 8 +++-- drivers/net/sfc/sfc_ethdev.c | 4 ++- drivers/net/softnic/rte_eth_softnic.c | 4 ++- drivers/net/szedata2/rte_eth_szedata2.c | 24 +++++++++++---- drivers/net/tap/rte_eth_tap.c | 4 ++- drivers/net/thunderx/nicvf_ethdev.c | 6 ++-- drivers/net/vhost/rte_eth_vhost.c | 10 ++++-- drivers/net/virtio/virtio_ethdev.c | 11 +++++-- drivers/net/vmxnet3/vmxnet3_ethdev.c | 13 +++++--- lib/librte_ethdev/rte_ethdev.c | 7 +++-- lib/librte_ethdev/rte_ethdev_driver.h | 2 +- lib/librte_ethdev/rte_ethdev_trace.h | 3 +- 69 files changed, 461 insertions(+), 195 deletions(-) diff --git a/app/test/virtual_pmd.c b/app/test/virtual_pmd.c index 4bd4d1c9ad..2c24c9b3f5 100644 --- a/app/test/virtual_pmd.c +++ b/app/test/virtual_pmd.c @@ -48,7 +48,7 @@ virtual_ethdev_start_fail(struct rte_eth_dev *eth_dev __rte_unused) return -1; } -static void virtual_ethdev_stop(struct rte_eth_dev *eth_dev __rte_unused) +static int virtual_ethdev_stop(struct rte_eth_dev *eth_dev __rte_unused) { void *pkt = NULL; struct virtual_ethdev_private *prv = eth_dev->data->dev_private; @@ -60,6 +60,8 @@ static void virtual_ethdev_stop(struct rte_eth_dev *eth_dev __rte_unused) while (rte_ring_dequeue(prv->tx_queue, &pkt) != -ENOENT) rte_pktmbuf_free(pkt); + + return 0; } static int diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c index 25876224f8..cb1c39b027 100644 --- a/drivers/net/af_packet/rte_eth_af_packet.c +++ b/drivers/net/af_packet/rte_eth_af_packet.c @@ -272,7 +272,7 @@ eth_dev_start(struct rte_eth_dev *dev) /* * This function gets called when the current port gets stopped. */ -static void +static int eth_dev_stop(struct rte_eth_dev *dev) { unsigned i; @@ -296,6 +296,7 @@ eth_dev_stop(struct rte_eth_dev *dev) } dev->data->dev_link.link_status = ETH_LINK_DOWN; + return 0; } static int diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c b/drivers/net/af_xdp/rte_eth_af_xdp.c index 0562e58696..1c1e3cadd6 100644 --- a/drivers/net/af_xdp/rte_eth_af_xdp.c +++ b/drivers/net/af_xdp/rte_eth_af_xdp.c @@ -599,10 +599,11 @@ eth_dev_start(struct rte_eth_dev *dev) } /* This function gets called when the current port gets stopped. */ -static void +static int eth_dev_stop(struct rte_eth_dev *dev) { dev->data->dev_link.link_status = ETH_LINK_DOWN; + return 0; } /* Find ethdev in list */ diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c index e3b1347769..f86a87fb47 100644 --- a/drivers/net/ark/ark_ethdev.c +++ b/drivers/net/ark/ark_ethdev.c @@ -29,7 +29,7 @@ static int ark_config_device(struct rte_eth_dev *dev); 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 int eth_ark_dev_stop(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); @@ -584,7 +584,7 @@ eth_ark_dev_start(struct rte_eth_dev *dev) return 0; } -static void +static int eth_ark_dev_stop(struct rte_eth_dev *dev) { uint16_t i; @@ -593,7 +593,7 @@ eth_ark_dev_stop(struct rte_eth_dev *dev) struct ark_mpu_t *mpu; if (ark->started == 0) - return; + return 0; ark->started = 0; /* Stop the extension first */ @@ -672,6 +672,8 @@ eth_ark_dev_stop(struct rte_eth_dev *dev) ark_pktchkr_dump_stats(ark->pc); ark_pktchkr_stop(ark->pc); } + + return 0; } static int diff --git a/drivers/net/atlantic/atl_ethdev.c b/drivers/net/atlantic/atl_ethdev.c index 2217511ca0..890848b4c4 100644 --- a/drivers/net/atlantic/atl_ethdev.c +++ b/drivers/net/atlantic/atl_ethdev.c @@ -17,7 +17,7 @@ static int eth_atl_dev_init(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); +static int 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 int atl_dev_close(struct rte_eth_dev *dev); @@ -599,7 +599,7 @@ atl_dev_start(struct rte_eth_dev *dev) /* * Stop device: disable rx and tx functions to allow for reconfiguring. */ -static void +static int atl_dev_stop(struct rte_eth_dev *dev) { struct rte_eth_link link; @@ -639,6 +639,8 @@ atl_dev_stop(struct rte_eth_dev *dev) rte_free(intr_handle->intr_vec); intr_handle->intr_vec = NULL; } + + return 0; } /* @@ -689,6 +691,7 @@ 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; + int ret; PMD_INIT_FUNC_TRACE(); @@ -697,7 +700,9 @@ atl_dev_close(struct rte_eth_dev *dev) hw = ATL_DEV_PRIVATE_TO_HW(dev->data->dev_private); - atl_dev_stop(dev); + ret = atl_dev_stop(dev); + if (ret != 0) + return ret; atl_free_queues(dev); diff --git a/drivers/net/avp/avp_ethdev.c b/drivers/net/avp/avp_ethdev.c index 95fdb57451..67f16623c5 100644 --- a/drivers/net/avp/avp_ethdev.c +++ b/drivers/net/avp/avp_ethdev.c @@ -37,7 +37,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 int avp_dev_stop(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); @@ -2075,7 +2075,7 @@ avp_dev_start(struct rte_eth_dev *eth_dev) return ret; } -static void +static int avp_dev_stop(struct rte_eth_dev *eth_dev) { struct avp_dev *avp = AVP_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private); @@ -2084,6 +2084,7 @@ avp_dev_stop(struct rte_eth_dev *eth_dev) rte_spinlock_lock(&avp->lock); if (avp->flags & AVP_F_DETACHED) { PMD_DRV_LOG(ERR, "Operation not supported during VM live migration\n"); + ret = -ENOTSUP; goto unlock; } @@ -2099,6 +2100,7 @@ avp_dev_stop(struct rte_eth_dev *eth_dev) unlock: rte_spinlock_unlock(&avp->lock); + return ret; } static int diff --git a/drivers/net/axgbe/axgbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c index cf085487cc..ce30a4f22c 100644 --- a/drivers/net/axgbe/axgbe_ethdev.c +++ b/drivers/net/axgbe/axgbe_ethdev.c @@ -13,7 +13,7 @@ static int eth_axgbe_dev_init(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); +static int axgbe_dev_stop(struct rte_eth_dev *dev); static void axgbe_dev_interrupt_handler(void *param); static int axgbe_dev_close(struct rte_eth_dev *dev); static int axgbe_dev_promiscuous_enable(struct rte_eth_dev *dev); @@ -386,7 +386,7 @@ axgbe_dev_start(struct rte_eth_dev *dev) } /* Stop device: disable rx and tx functions to allow for reconfiguring. */ -static void +static int axgbe_dev_stop(struct rte_eth_dev *dev) { struct axgbe_port *pdata = dev->data->dev_private; @@ -396,7 +396,7 @@ axgbe_dev_stop(struct rte_eth_dev *dev) rte_intr_disable(&pdata->pci_dev->intr_handle); if (rte_bit_relaxed_get32(AXGBE_STOPPED, &pdata->dev_state)) - return; + return 0; rte_bit_relaxed_set32(AXGBE_STOPPED, &pdata->dev_state); axgbe_dev_disable_tx(dev); @@ -406,6 +406,8 @@ axgbe_dev_stop(struct rte_eth_dev *dev) pdata->hw_if.exit(pdata); memset(&dev->data->dev_link, 0, sizeof(struct rte_eth_link)); rte_bit_relaxed_set32(AXGBE_DOWN, &pdata->dev_state); + + return 0; } static int diff --git a/drivers/net/bnx2x/bnx2x_ethdev.c b/drivers/net/bnx2x/bnx2x_ethdev.c index 40225b2f44..5704afa749 100644 --- a/drivers/net/bnx2x/bnx2x_ethdev.c +++ b/drivers/net/bnx2x/bnx2x_ethdev.c @@ -247,7 +247,7 @@ bnx2x_dev_start(struct rte_eth_dev *dev) return ret; } -static void +static int bnx2x_dev_stop(struct rte_eth_dev *dev) { struct bnx2x_softc *sc = dev->data->dev_private; @@ -274,10 +274,10 @@ bnx2x_dev_stop(struct rte_eth_dev *dev) ret = bnx2x_nic_unload(sc, UNLOAD_NORMAL, FALSE); if (ret) { PMD_DRV_LOG(DEBUG, sc, "bnx2x_nic_unload failed (%d)", ret); - return; + return ret; } - return; + return 0; } static int diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c index b4654ec6af..ea0eb1383a 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -1345,12 +1345,13 @@ static void bnxt_free_switch_domain(struct bnxt *bp) } /* Unload the driver, release resources */ -static void bnxt_dev_stop_op(struct rte_eth_dev *eth_dev) +static int bnxt_dev_stop_op(struct rte_eth_dev *eth_dev) { struct bnxt *bp = eth_dev->data->dev_private; struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev); struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; struct rte_eth_link link; + int ret; eth_dev->data->dev_started = 0; eth_dev->data->scattered_rx = 0; @@ -1365,7 +1366,9 @@ static void bnxt_dev_stop_op(struct rte_eth_dev *eth_dev) rte_intr_disable(intr_handle); /* Stop the child representors for this device */ - bnxt_rep_stop_all(bp); + ret = bnxt_rep_stop_all(bp); + if (ret != 0) + return ret; /* delete the bnxt ULP port details */ bnxt_ulp_port_deinit(bp); @@ -1406,11 +1409,14 @@ static void bnxt_dev_stop_op(struct rte_eth_dev *eth_dev) /* All filters are deleted on a port stop. */ if (BNXT_FLOW_XSTATS_EN(bp)) bp->flow_stat->flow_count = 0; + + return 0; } static int bnxt_dev_close_op(struct rte_eth_dev *eth_dev) { struct bnxt *bp = eth_dev->data->dev_private; + int ret; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; @@ -1420,8 +1426,11 @@ static int bnxt_dev_close_op(struct rte_eth_dev *eth_dev) rte_eal_alarm_cancel(bnxt_dev_recover, (void *)bp); bnxt_cancel_fc_thread(bp); - if (eth_dev->data->dev_started) - bnxt_dev_stop_op(eth_dev); + if (eth_dev->data->dev_started) { + ret = bnxt_dev_stop_op(eth_dev); + if (ret != 0) + return ret; + } bnxt_free_switch_domain(bp); diff --git a/drivers/net/bnxt/bnxt_reps.c b/drivers/net/bnxt/bnxt_reps.c index 74a76fce57..fb171245df 100644 --- a/drivers/net/bnxt/bnxt_reps.c +++ b/drivers/net/bnxt/bnxt_reps.c @@ -476,7 +476,7 @@ static int bnxt_vfr_free(struct bnxt_representor *vfr) return rc; } -void bnxt_rep_dev_stop_op(struct rte_eth_dev *eth_dev) +int bnxt_rep_dev_stop_op(struct rte_eth_dev *eth_dev) { struct bnxt_representor *vfr_bp = eth_dev->data->dev_private; @@ -492,6 +492,8 @@ void bnxt_rep_dev_stop_op(struct rte_eth_dev *eth_dev) eth_dev->data->dev_link.link_status = 0; bnxt_rep_free_rx_mbufs(vfr_bp); + + return 0; } int bnxt_rep_dev_close_op(struct rte_eth_dev *eth_dev) @@ -808,19 +810,24 @@ int bnxt_rep_stats_reset_op(struct rte_eth_dev *eth_dev) return 0; } -void bnxt_rep_stop_all(struct bnxt *bp) +int bnxt_rep_stop_all(struct bnxt *bp) { uint16_t vf_id; struct rte_eth_dev *rep_eth_dev; + int ret; /* No vfrep ports just exit */ if (!bp->rep_info) - return; + return 0; for (vf_id = 0; vf_id < BNXT_MAX_VF_REPS; vf_id++) { rep_eth_dev = bp->rep_info[vf_id].vfr_eth_dev; if (!rep_eth_dev) continue; - bnxt_rep_dev_stop_op(rep_eth_dev); + ret = bnxt_rep_dev_stop_op(rep_eth_dev); + if (ret != 0) + return ret; } + + return 0; } diff --git a/drivers/net/bnxt/bnxt_reps.h b/drivers/net/bnxt/bnxt_reps.h index a019530094..916769ca67 100644 --- a/drivers/net/bnxt/bnxt_reps.h +++ b/drivers/net/bnxt/bnxt_reps.h @@ -44,10 +44,10 @@ int bnxt_rep_tx_queue_setup_op(struct rte_eth_dev *eth_dev, tx_conf); void bnxt_rep_rx_queue_release_op(void *rx_queue); void bnxt_rep_tx_queue_release_op(void *tx_queue); -void bnxt_rep_dev_stop_op(struct rte_eth_dev *eth_dev); +int bnxt_rep_dev_stop_op(struct rte_eth_dev *eth_dev); int bnxt_rep_dev_close_op(struct rte_eth_dev *eth_dev); int bnxt_rep_stats_get_op(struct rte_eth_dev *eth_dev, struct rte_eth_stats *stats); int bnxt_rep_stats_reset_op(struct rte_eth_dev *eth_dev); -void bnxt_rep_stop_all(struct bnxt *bp); +int bnxt_rep_stop_all(struct bnxt *bp); #endif /* _BNXT_REPS_H_ */ diff --git a/drivers/net/bonding/eth_bond_private.h b/drivers/net/bonding/eth_bond_private.h index 62e3a9dbf3..8f198bd50e 100644 --- a/drivers/net/bonding/eth_bond_private.h +++ b/drivers/net/bonding/eth_bond_private.h @@ -316,7 +316,7 @@ bond_tlb_enable(struct bond_dev_private *internals); void bond_tlb_activate_slave(struct bond_dev_private *internals); -void +int bond_ethdev_stop(struct rte_eth_dev *eth_dev); int diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index 6cb03d40d7..3c4d8b5070 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -1695,11 +1695,9 @@ slave_configure(struct rte_eth_dev *bonded_eth_dev, /* Stop slave */ errval = rte_eth_dev_stop(slave_eth_dev->data->port_id); - if (errval != 0) { + if (errval != 0) RTE_BOND_LOG(ERR, "rte_eth_dev_stop: port %u, err (%d)", slave_eth_dev->data->port_id, errval); - return errval; - } /* Enable interrupts on slave device if supported */ if (slave_eth_dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC) @@ -2051,11 +2049,12 @@ bond_ethdev_free_queues(struct rte_eth_dev *dev) } } -void +int bond_ethdev_stop(struct rte_eth_dev *eth_dev) { struct bond_dev_private *internals = eth_dev->data->dev_private; uint16_t i; + int ret; if (internals->mode == BONDING_MODE_8023AD) { struct port *port; @@ -2094,10 +2093,17 @@ bond_ethdev_stop(struct rte_eth_dev *eth_dev) internals->active_slave_count, slave_id) != internals->active_slave_count) { internals->slaves[i].last_link_status = 0; - rte_eth_dev_stop(slave_id); + ret = rte_eth_dev_stop(slave_id); + if (ret != 0) { + RTE_BOND_LOG(ERR, "Failed to stop device on port %u", + slave_id); + return ret; + } deactivate_slave(eth_dev, slave_id); } } + + return 0; } int @@ -3430,6 +3436,7 @@ bond_remove(struct rte_vdev_device *dev) struct rte_eth_dev *eth_dev; struct bond_dev_private *internals; const char *name; + int ret; if (!dev) return -EINVAL; @@ -3452,7 +3459,9 @@ bond_remove(struct rte_vdev_device *dev) return -EBUSY; if (eth_dev->data->dev_started == 1) { - bond_ethdev_stop(eth_dev); + ret = bond_ethdev_stop(eth_dev); + if (ret != 0) + return ret; bond_ethdev_close(eth_dev); } rte_eth_dev_release_port(eth_dev); diff --git a/drivers/net/cxgbe/cxgbe_ethdev.c b/drivers/net/cxgbe/cxgbe_ethdev.c index 16beb2d435..29c061e505 100644 --- a/drivers/net/cxgbe/cxgbe_ethdev.c +++ b/drivers/net/cxgbe/cxgbe_ethdev.c @@ -416,7 +416,7 @@ int cxgbe_dev_start(struct rte_eth_dev *eth_dev) /* * Stop device: disable rx and tx functions to allow for reconfiguring. */ -void cxgbe_dev_stop(struct rte_eth_dev *eth_dev) +int cxgbe_dev_stop(struct rte_eth_dev *eth_dev) { struct port_info *pi = eth_dev->data->dev_private; struct adapter *adapter = pi->adapter; @@ -424,7 +424,7 @@ void cxgbe_dev_stop(struct rte_eth_dev *eth_dev) CXGBE_FUNC_TRACE(); if (!(adapter->flags & FULL_INIT_DONE)) - return; + return 0; cxgbe_down(pi); @@ -434,6 +434,8 @@ void cxgbe_dev_stop(struct rte_eth_dev *eth_dev) */ t4_sge_eth_clear_queues(pi); eth_dev->data->scattered_rx = 0; + + return 0; } int cxgbe_dev_configure(struct rte_eth_dev *eth_dev) diff --git a/drivers/net/cxgbe/cxgbe_pfvf.h b/drivers/net/cxgbe/cxgbe_pfvf.h index 69d91639e9..801d6995d1 100644 --- a/drivers/net/cxgbe/cxgbe_pfvf.h +++ b/drivers/net/cxgbe/cxgbe_pfvf.h @@ -18,7 +18,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); +int cxgbe_dev_stop(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); diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c index af47c196ae..583e689760 100644 --- a/drivers/net/dpaa/dpaa_ethdev.c +++ b/drivers/net/dpaa/dpaa_ethdev.c @@ -415,7 +415,7 @@ static int dpaa_eth_dev_start(struct rte_eth_dev *dev) return 0; } -static void dpaa_eth_dev_stop(struct rte_eth_dev *dev) +static int dpaa_eth_dev_stop(struct rte_eth_dev *dev) { struct fman_if *fif = dev->process_private; @@ -424,6 +424,8 @@ static void dpaa_eth_dev_stop(struct rte_eth_dev *dev) if (!fif->is_shared_mac) fman_if_disable_rx(fif); dev->tx_pkt_burst = dpaa_eth_tx_drop_all; + + return 0; } static int dpaa_eth_dev_close(struct rte_eth_dev *dev) @@ -436,6 +438,7 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) struct rte_eth_link *link = &dev->data->dev_link; struct dpaa_if *dpaa_intf = dev->data->dev_private; int loop; + int ret; PMD_INIT_FUNC_TRACE(); @@ -457,7 +460,9 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) intr_handle = &dpaa_dev->intr_handle; __fif = container_of(fif, struct __fman_if, __if); - dpaa_eth_dev_stop(dev); + ret = dpaa_eth_dev_stop(dev); + if (ret != 0) + return ret; /* Reset link to autoneg */ if (link->link_status && !link->link_autoneg) @@ -1293,7 +1298,7 @@ static int dpaa_link_down(struct rte_eth_dev *dev) if (dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC) dpaa_update_link_status(__fif->node_name, ETH_LINK_DOWN); else - dpaa_eth_dev_stop(dev); + return dpaa_eth_dev_stop(dev); return 0; } diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c index d8624514df..3a17d54e2e 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -1195,7 +1195,7 @@ dpaa2_dev_start(struct rte_eth_dev *dev) * This routine disables all traffic on the adapter by issuing a * global reset on the MAC. */ -static void +static int dpaa2_dev_stop(struct rte_eth_dev *dev) { struct dpaa2_dev_priv *priv = dev->data->dev_private; @@ -1227,12 +1227,14 @@ dpaa2_dev_stop(struct rte_eth_dev *dev) if (ret) { DPAA2_PMD_ERR("Failure (ret %d) in disabling dpni %d dev", ret, priv->hw_id); - return; + return ret; } /* clear the recorded link status */ 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 d050eb478a..27da5a67c2 100644 --- a/drivers/net/e1000/em_ethdev.c +++ b/drivers/net/e1000/em_ethdev.c @@ -33,7 +33,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 int eth_em_stop(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); @@ -533,7 +533,9 @@ eth_em_start(struct rte_eth_dev *dev) PMD_INIT_FUNC_TRACE(); - eth_em_stop(dev); + ret = eth_em_stop(dev); + if (ret != 0) + return ret; e1000_power_up_phy(hw); @@ -709,7 +711,7 @@ eth_em_start(struct rte_eth_dev *dev) * global reset on the MAC. * **********************************************************************/ -static void +static int eth_em_stop(struct rte_eth_dev *dev) { struct rte_eth_link link; @@ -751,6 +753,8 @@ eth_em_stop(struct rte_eth_dev *dev) rte_free(intr_handle->intr_vec); intr_handle->intr_vec = NULL; } + + return 0; } static int @@ -761,11 +765,14 @@ eth_em_close(struct rte_eth_dev *dev) E1000_DEV_PRIVATE(dev->data->dev_private); struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; + int ret; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - eth_em_stop(dev); + ret = eth_em_stop(dev); + if (ret != 0) + return ret; adapter->stopped = 1; em_dev_free_queues(dev); e1000_phy_hw_reset(hw); diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c index cb3d97e2a3..ab55f2a90d 100644 --- a/drivers/net/e1000/igb_ethdev.c +++ b/drivers/net/e1000/igb_ethdev.c @@ -74,7 +74,7 @@ static int eth_igb_configure(struct rte_eth_dev *dev); static int eth_igb_start(struct rte_eth_dev *dev); -static void eth_igb_stop(struct rte_eth_dev *dev); +static int 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 int eth_igb_close(struct rte_eth_dev *dev); @@ -154,7 +154,7 @@ static int eth_igb_default_mac_addr_set(struct rte_eth_dev *dev, 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 int igbvf_dev_stop(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); @@ -1441,7 +1441,7 @@ eth_igb_start(struct rte_eth_dev *dev) * global reset on the MAC. * **********************************************************************/ -static void +static int eth_igb_stop(struct rte_eth_dev *dev) { struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -1452,7 +1452,7 @@ eth_igb_stop(struct rte_eth_dev *dev) E1000_DEV_PRIVATE(dev->data->dev_private); if (adapter->stopped) - return; + return 0; eth_igb_rxtx_control(dev, false); @@ -1497,6 +1497,8 @@ eth_igb_stop(struct rte_eth_dev *dev) } adapter->stopped = true; + + return 0; } static int @@ -1534,11 +1536,14 @@ eth_igb_close(struct rte_eth_dev *dev) struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; struct e1000_filter_info *filter_info = E1000_DEV_PRIVATE_TO_FILTER_INFO(dev->data->dev_private); + int ret; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - eth_igb_stop(dev); + ret = eth_igb_stop(dev); + if (ret != 0) + return ret; e1000_phy_hw_reset(hw); igb_release_manageability(hw); @@ -3340,7 +3345,7 @@ igbvf_dev_start(struct rte_eth_dev *dev) return 0; } -static void +static int igbvf_dev_stop(struct rte_eth_dev *dev) { struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); @@ -3349,7 +3354,7 @@ igbvf_dev_stop(struct rte_eth_dev *dev) E1000_DEV_PRIVATE(dev->data->dev_private); if (adapter->stopped) - return; + return 0; PMD_INIT_FUNC_TRACE(); @@ -3374,6 +3379,8 @@ igbvf_dev_stop(struct rte_eth_dev *dev) } adapter->stopped = true; + + return 0; } static int @@ -3382,6 +3389,7 @@ igbvf_dev_close(struct rte_eth_dev *dev) struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); struct rte_ether_addr addr; struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); + int ret; PMD_INIT_FUNC_TRACE(); @@ -3390,7 +3398,9 @@ igbvf_dev_close(struct rte_eth_dev *dev) e1000_reset_hw(hw); - igbvf_dev_stop(dev); + ret = igbvf_dev_stop(dev); + if (ret != 0) + return ret; igb_dev_free_queues(dev); diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index d32fa43837..775861b44c 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -198,7 +198,7 @@ static void ena_init_rings(struct ena_adapter *adapter, bool disable_meta_caching); 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 int ena_stop(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); @@ -505,12 +505,16 @@ 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; struct ena_adapter *adapter = dev->data->dev_private; + int ret; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - if (adapter->state == ENA_ADAPTER_STATE_RUNNING) - ena_stop(dev); + if (adapter->state == ENA_ADAPTER_STATE_RUNNING) { + ret = ena_stop(dev); + if (ret != 0) + return ret; + } adapter->state = ENA_ADAPTER_STATE_CLOSED; ena_rx_queue_release_all(dev); @@ -1100,7 +1104,7 @@ static int ena_start(struct rte_eth_dev *dev) return rc; } -static void ena_stop(struct rte_eth_dev *dev) +static int ena_stop(struct rte_eth_dev *dev) { struct ena_adapter *adapter = dev->data->dev_private; struct ena_com_dev *ena_dev = &adapter->ena_dev; @@ -1118,6 +1122,8 @@ static void ena_stop(struct rte_eth_dev *dev) ++adapter->dev_stats.dev_stop; adapter->state = ENA_ADAPTER_STATE_STOPPED; + + return 0; } static int ena_create_io_queue(struct ena_ring *ring) diff --git a/drivers/net/enetc/enetc_ethdev.c b/drivers/net/enetc/enetc_ethdev.c index b3dec7e64d..1ae83daee5 100644 --- a/drivers/net/enetc/enetc_ethdev.c +++ b/drivers/net/enetc/enetc_ethdev.c @@ -45,7 +45,7 @@ enetc_dev_start(struct rte_eth_dev *dev) return 0; } -static void +static int enetc_dev_stop(struct rte_eth_dev *dev) { struct enetc_eth_hw *hw = @@ -61,6 +61,8 @@ enetc_dev_stop(struct rte_eth_dev *dev) val = enetc_port_rd(enetc_hw, ENETC_PM0_CMD_CFG); enetc_port_wr(enetc_hw, ENETC_PM0_CMD_CFG, val & (~(ENETC_PM0_TX_EN | ENETC_PM0_RX_EN))); + + return 0; } static const uint32_t * @@ -549,12 +551,15 @@ static int enetc_dev_close(struct rte_eth_dev *dev) { uint16_t i; + int ret; PMD_INIT_FUNC_TRACE(); if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - enetc_dev_stop(dev); + ret = enetc_dev_stop(dev); + if (ret != 0) + return ret; for (i = 0; i < dev->data->nb_rx_queues; i++) { enetc_rx_queue_release(dev->data->rx_queues[i]); diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c index 60ee5e01de..4a34c0ef83 100644 --- a/drivers/net/enic/enic_ethdev.c +++ b/drivers/net/enic/enic_ethdev.c @@ -428,19 +428,21 @@ static int enicpmd_dev_start(struct rte_eth_dev *eth_dev) /* * Stop device: disable rx and tx functions to allow for reconfiguring. */ -static void enicpmd_dev_stop(struct rte_eth_dev *eth_dev) +static int enicpmd_dev_stop(struct rte_eth_dev *eth_dev) { struct rte_eth_link link; struct enic *enic = pmd_priv(eth_dev); if (rte_eal_process_type() != RTE_PROC_PRIMARY) - return; + return 0; ENICPMD_FUNC_TRACE(); enic_disable(enic); memset(&link, 0, sizeof(link)); rte_eth_linkstatus_set(eth_dev, &link); + + return 0; } /* diff --git a/drivers/net/enic/enic_vf_representor.c b/drivers/net/enic/enic_vf_representor.c index 169c611a68..984a754e35 100644 --- a/drivers/net/enic/enic_vf_representor.c +++ b/drivers/net/enic/enic_vf_representor.c @@ -242,7 +242,7 @@ static int enic_vf_dev_start(struct rte_eth_dev *eth_dev) return 0; } -static void enic_vf_dev_stop(struct rte_eth_dev *eth_dev) +static int enic_vf_dev_stop(struct rte_eth_dev *eth_dev) { struct enic_vf_representor *vf; struct vnic_rq *rq; @@ -250,7 +250,7 @@ static void enic_vf_dev_stop(struct rte_eth_dev *eth_dev) ENICPMD_FUNC_TRACE(); if (rte_eal_process_type() != RTE_PROC_PRIMARY) - return; + return 0; /* Undo dev_start. Disable/clean WQ */ vf = eth_dev->data->dev_private; pf = vf->pf; @@ -271,6 +271,8 @@ static void enic_vf_dev_stop(struct rte_eth_dev *eth_dev) eth_dev->data->rx_queue_state[0] = RTE_ETH_QUEUE_STATE_STOPPED; /* Clean up representor flowman */ enic_fm_destroy(&vf->enic); + + return 0; } /* diff --git a/drivers/net/failsafe/failsafe_ops.c b/drivers/net/failsafe/failsafe_ops.c index 4fbb7e1da0..8db7d85b04 100644 --- a/drivers/net/failsafe/failsafe_ops.c +++ b/drivers/net/failsafe/failsafe_ops.c @@ -179,22 +179,32 @@ fs_set_queues_state_stop(struct rte_eth_dev *dev) RTE_ETH_QUEUE_STATE_STOPPED; } -static void +static int fs_dev_stop(struct rte_eth_dev *dev) { struct sub_device *sdev; uint8_t i; + int ret; fs_lock(dev, 0); PRIV(dev)->state = DEV_STARTED - 1; FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_STARTED) { - rte_eth_dev_stop(PORT_ID(sdev)); + ret = rte_eth_dev_stop(PORT_ID(sdev)); + if (ret != 0) { + ERROR("Failed to stop device %u", + PORT_ID(sdev)); + PRIV(dev)->state = DEV_STARTED + 1; + fs_unlock(dev, 0); + return ret; + } failsafe_rx_intr_uninstall_subdevice(sdev); sdev->state = DEV_STARTED - 1; } failsafe_rx_intr_uninstall(dev); fs_set_queues_state_stop(dev); fs_unlock(dev, 0); + + return 0; } static int @@ -644,8 +654,13 @@ failsafe_eth_dev_close(struct rte_eth_dev *dev) fs_lock(dev, 0); failsafe_hotplug_alarm_cancel(dev); - if (PRIV(dev)->state == DEV_STARTED) - dev->dev_ops->dev_stop(dev); + if (PRIV(dev)->state == DEV_STARTED) { + ret = dev->dev_ops->dev_stop(dev); + if (ret != 0) { + fs_unlock(dev, 0); + return ret; + } + } PRIV(dev)->state = DEV_ACTIVE - 1; FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) { DEBUG("Closing sub_device %d", i); diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c index c4a6fdf7f0..41eb0b9691 100644 --- a/drivers/net/fm10k/fm10k_ethdev.c +++ b/drivers/net/fm10k/fm10k_ethdev.c @@ -1152,7 +1152,7 @@ fm10k_dev_start(struct rte_eth_dev *dev) return 0; } -static void +static int fm10k_dev_stop(struct rte_eth_dev *dev) { struct fm10k_hw *hw = FM10K_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -1187,6 +1187,8 @@ fm10k_dev_stop(struct rte_eth_dev *dev) rte_intr_efd_disable(intr_handle); rte_free(intr_handle->intr_vec); intr_handle->intr_vec = NULL; + + return 0; } static void @@ -2785,6 +2787,7 @@ fm10k_dev_close(struct rte_eth_dev *dev) struct fm10k_hw *hw = FM10K_DEV_PRIVATE_TO_HW(dev->data->dev_private); struct rte_pci_device *pdev = RTE_ETH_DEV_TO_PCI(dev); struct rte_intr_handle *intr_handle = &pdev->intr_handle; + int ret; PMD_INIT_FUNC_TRACE(); if (rte_eal_process_type() != RTE_PROC_PRIMARY) @@ -2800,7 +2803,11 @@ fm10k_dev_close(struct rte_eth_dev *dev) /* Stop mailbox service first */ fm10k_close_mbx_service(hw); - fm10k_dev_stop(dev); + + ret = fm10k_dev_stop(dev); + if (ret != 0) + return ret; + fm10k_dev_queue_release(dev); fm10k_stop_hw(hw); diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c b/drivers/net/hinic/hinic_pmd_ethdev.c index 466c8362b9..41334cd622 100644 --- a/drivers/net/hinic/hinic_pmd_ethdev.c +++ b/drivers/net/hinic/hinic_pmd_ethdev.c @@ -1177,7 +1177,7 @@ static void hinic_free_all_sq(struct hinic_nic_dev *nic_dev) * @param dev * Pointer to Ethernet device structure. */ -static void hinic_dev_stop(struct rte_eth_dev *dev) +static int hinic_dev_stop(struct rte_eth_dev *dev) { int rc; char *name; @@ -1192,7 +1192,7 @@ static void hinic_dev_stop(struct rte_eth_dev *dev) if (!rte_bit_relaxed_test_and_clear32(HINIC_DEV_START, &nic_dev->dev_status)) { PMD_DRV_LOG(INFO, "Device %s already stopped", name); - return; + return 0; } /* just stop phy port and vport */ @@ -1227,6 +1227,8 @@ static void hinic_dev_stop(struct rte_eth_dev *dev) /* free mbuf */ hinic_free_all_rx_mbuf(dev); hinic_free_all_tx_mbuf(dev); + + return 0; } static void hinic_disable_interrupt(struct rte_eth_dev *dev) @@ -2968,6 +2970,7 @@ static void hinic_nic_dev_destroy(struct rte_eth_dev *eth_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); + int ret; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; @@ -2980,7 +2983,9 @@ static int hinic_dev_close(struct rte_eth_dev *dev) } /* stop device first */ - hinic_dev_stop(dev); + ret = hinic_dev_stop(dev); + if (ret != 0) + return ret; /* rx_cqe, rx_info */ hinic_free_all_rx_resources(dev); diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c index ce5bae538d..051546a1ce 100644 --- a/drivers/net/hns3/hns3_ethdev.c +++ b/drivers/net/hns3/hns3_ethdev.c @@ -4990,7 +4990,7 @@ hns3_unmap_rx_interrupt(struct rte_eth_dev *dev) } } -static void +static int hns3_dev_stop(struct rte_eth_dev *dev) { struct hns3_adapter *hns = dev->data->dev_private; @@ -5017,6 +5017,8 @@ hns3_dev_stop(struct rte_eth_dev *dev) hns3_rx_scattered_reset(dev); rte_eal_alarm_cancel(hns3_service_handler, dev); rte_spinlock_unlock(&hw->lock); + + return 0; } static int @@ -5024,6 +5026,7 @@ hns3_dev_close(struct rte_eth_dev *eth_dev) { struct hns3_adapter *hns = eth_dev->data->dev_private; struct hns3_hw *hw = &hns->hw; + int ret; if (rte_eal_process_type() != RTE_PROC_PRIMARY) { rte_free(eth_dev->process_private); @@ -5031,8 +5034,11 @@ hns3_dev_close(struct rte_eth_dev *eth_dev) return 0; } - if (hw->adapter_state == HNS3_NIC_STARTED) - hns3_dev_stop(eth_dev); + if (hw->adapter_state == HNS3_NIC_STARTED) { + ret = hns3_dev_stop(eth_dev); + if (ret != 0) + return ret; + } hw->adapter_state = HNS3_NIC_CLOSING; hns3_reset_abort(hns); diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c index 1a19c0e6e6..29cb326f67 100644 --- a/drivers/net/hns3/hns3_ethdev_vf.c +++ b/drivers/net/hns3/hns3_ethdev_vf.c @@ -1945,7 +1945,7 @@ hns3vf_unmap_rx_interrupt(struct rte_eth_dev *dev) } } -static void +static int hns3vf_dev_stop(struct rte_eth_dev *dev) { struct hns3_adapter *hns = dev->data->dev_private; @@ -1972,6 +1972,8 @@ hns3vf_dev_stop(struct rte_eth_dev *dev) hns3_rx_scattered_reset(dev); rte_eal_alarm_cancel(hns3vf_service_handler, dev); rte_spinlock_unlock(&hw->lock); + + return 0; } static int @@ -1979,12 +1981,16 @@ hns3vf_dev_close(struct rte_eth_dev *eth_dev) { struct hns3_adapter *hns = eth_dev->data->dev_private; struct hns3_hw *hw = &hns->hw; + int ret; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - if (hw->adapter_state == HNS3_NIC_STARTED) - hns3vf_dev_stop(eth_dev); + if (hw->adapter_state == HNS3_NIC_STARTED) { + ret = hns3vf_dev_stop(eth_dev); + if (ret != 0) + return ret; + } hw->adapter_state = HNS3_NIC_CLOSING; hns3_reset_abort(hns); diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index 943cfe71dc..de8d0db31c 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -224,7 +224,7 @@ static int eth_i40e_dev_init(struct rte_eth_dev *eth_dev, void *init_params); 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 int i40e_dev_stop(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); @@ -2542,7 +2542,7 @@ i40e_dev_start(struct rte_eth_dev *dev) return ret; } -static void +static int i40e_dev_stop(struct rte_eth_dev *dev) { struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private); @@ -2553,7 +2553,7 @@ i40e_dev_stop(struct rte_eth_dev *dev) int i; if (hw->adapter_stopped == 1) - return; + return 0; if (dev->data->dev_conf.intr_conf.rxq == 0) { rte_eal_alarm_cancel(i40e_dev_alarm_handler, dev); @@ -2601,6 +2601,8 @@ i40e_dev_stop(struct rte_eth_dev *dev) hw->adapter_stopped = 1; pf->adapter->rss_reta_updated = 0; + + return 0; } static int @@ -2628,7 +2630,9 @@ i40e_dev_close(struct rte_eth_dev *dev) PMD_INIT_LOG(WARNING, "failed to free switch domain: %d", ret); - i40e_dev_stop(dev); + ret = i40e_dev_stop(dev); + if (ret != 0) + return ret; /* Remove all mirror rules */ while ((p_mirror = TAILQ_FIRST(&pf->mirror_list))) { diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c index 4d6510d1ff..60999bcf55 100644 --- a/drivers/net/i40e/i40e_ethdev_vf.c +++ b/drivers/net/i40e/i40e_ethdev_vf.c @@ -74,7 +74,7 @@ enum i40evf_aq_result { static int i40evf_dev_configure(struct rte_eth_dev *dev); static int i40evf_dev_start(struct rte_eth_dev *dev); -static void i40evf_dev_stop(struct rte_eth_dev *dev); +static int i40evf_dev_stop(struct rte_eth_dev *dev); static int i40evf_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info); static int i40evf_dev_link_update(struct rte_eth_dev *dev, @@ -2176,7 +2176,7 @@ i40evf_dev_start(struct rte_eth_dev *dev) return -1; } -static void +static int i40evf_dev_stop(struct rte_eth_dev *dev) { struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); @@ -2190,7 +2190,7 @@ i40evf_dev_stop(struct rte_eth_dev *dev) rte_intr_disable(intr_handle); if (hw->adapter_stopped == 1) - return; + return 0; i40evf_stop_queues(dev); i40evf_disable_queues_intr(dev); i40e_dev_clear_queues(dev); @@ -2208,6 +2208,7 @@ i40evf_dev_stop(struct rte_eth_dev *dev) FALSE); hw->adapter_stopped = 1; + return 0; } static int @@ -2401,11 +2402,15 @@ i40evf_dev_close(struct rte_eth_dev *dev) { struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); struct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private); + int ret; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - i40evf_dev_stop(dev); + ret = i40evf_dev_stop(dev); + if (ret != 0) + return ret; + i40e_dev_free_queues(dev); /* * disable promiscuous mode before reset vf diff --git a/drivers/net/i40e/i40e_vf_representor.c b/drivers/net/i40e/i40e_vf_representor.c index f09d4d8798..791c050b8c 100644 --- a/drivers/net/i40e/i40e_vf_representor.c +++ b/drivers/net/i40e/i40e_vf_representor.c @@ -118,9 +118,10 @@ i40e_vf_representor_dev_start(__rte_unused struct rte_eth_dev *dev) return 0; } -static void +static int i40e_vf_representor_dev_stop(__rte_unused struct rte_eth_dev *dev) { + return 0; } static int diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c index f5e6e852ae..321b80c4ba 100644 --- a/drivers/net/iavf/iavf_ethdev.c +++ b/drivers/net/iavf/iavf_ethdev.c @@ -31,7 +31,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 int iavf_dev_stop(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, @@ -531,7 +531,7 @@ iavf_dev_start(struct rte_eth_dev *dev) return -1; } -static void +static int iavf_dev_stop(struct rte_eth_dev *dev) { struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(dev->data->dev_private); @@ -542,7 +542,7 @@ iavf_dev_stop(struct rte_eth_dev *dev) PMD_INIT_FUNC_TRACE(); if (adapter->stopped == 1) - return; + return 0; iavf_stop_queues(dev); @@ -562,6 +562,8 @@ iavf_dev_stop(struct rte_eth_dev *dev) false); adapter->stopped = 1; + + return 0; } static int @@ -1499,11 +1501,16 @@ iavf_dev_close(struct rte_eth_dev *dev) 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); + int ret; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; iavf_dev_stop(dev); + ret = iavf_dev_stop(dev); + if (ret != 0) + return ret; + iavf_flow_flush(dev, NULL); iavf_flow_uninit(adapter); diff --git a/drivers/net/ice/ice_dcf_ethdev.c b/drivers/net/ice/ice_dcf_ethdev.c index 33dd0c44f2..047926dab2 100644 --- a/drivers/net/ice/ice_dcf_ethdev.c +++ b/drivers/net/ice/ice_dcf_ethdev.c @@ -589,7 +589,7 @@ ice_dcf_stop_queues(struct rte_eth_dev *dev) } } -static void +static int ice_dcf_dev_stop(struct rte_eth_dev *dev) { struct ice_dcf_adapter *dcf_ad = dev->data->dev_private; @@ -598,7 +598,7 @@ ice_dcf_dev_stop(struct rte_eth_dev *dev) if (ad->pf.adapter_stopped == 1) { PMD_DRV_LOG(DEBUG, "Port is already stopped"); - return; + return 0; } ice_dcf_stop_queues(dev); @@ -612,6 +612,8 @@ ice_dcf_dev_stop(struct rte_eth_dev *dev) ice_dcf_add_del_all_mac_addr(&dcf_ad->real_hw, false); dev->data->dev_link.link_status = ETH_LINK_DOWN; ad->pf.adapter_stopped = 1; + + return 0; } static int diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c index 0056da78a5..bfc6ce42f3 100644 --- a/drivers/net/ice/ice_ethdev.c +++ b/drivers/net/ice/ice_ethdev.c @@ -76,7 +76,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 int ice_dev_stop(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, @@ -2331,7 +2331,7 @@ ice_vsi_disable_queues_intr(struct ice_vsi *vsi) ICE_WRITE_REG(hw, GLINT_DYN_CTL(0), GLINT_DYN_CTL_WB_ON_ITR_M); } -static void +static int ice_dev_stop(struct rte_eth_dev *dev) { struct rte_eth_dev_data *data = dev->data; @@ -2343,7 +2343,7 @@ ice_dev_stop(struct rte_eth_dev *dev) /* avoid stopping again */ if (pf->adapter_stopped) - return; + return 0; /* stop and clear all Rx queues */ for (i = 0; i < data->nb_rx_queues; i++) @@ -2369,6 +2369,8 @@ ice_dev_stop(struct rte_eth_dev *dev) } pf->adapter_stopped = true; + + return 0; } static int @@ -2380,6 +2382,7 @@ ice_dev_close(struct rte_eth_dev *dev) struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; struct ice_adapter *ad = ICE_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); + int ret; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; @@ -2391,7 +2394,9 @@ ice_dev_close(struct rte_eth_dev *dev) */ ice_pf_disable_irq0(hw); - ice_dev_stop(dev); + ret = ice_dev_stop(dev); + if (ret != 0) + return ret; if (!ad->is_safe_mode) ice_flow_uninit(ad); diff --git a/drivers/net/igc/igc_ethdev.c b/drivers/net/igc/igc_ethdev.c index 7f5066df4b..a3e8f112c8 100644 --- a/drivers/net/igc/igc_ethdev.c +++ b/drivers/net/igc/igc_ethdev.c @@ -179,7 +179,7 @@ static const struct rte_igc_xstats_name_off rte_igc_stats_strings[] = { static int eth_igc_configure(struct rte_eth_dev *dev); static int eth_igc_link_update(struct rte_eth_dev *dev, int wait_to_complete); -static void eth_igc_stop(struct rte_eth_dev *dev); +static int 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); @@ -607,7 +607,7 @@ eth_igc_rxtx_control(struct rte_eth_dev *dev, bool enable) * This routine disables all traffic on the adapter by issuing a * global reset on the MAC. */ -static void +static int eth_igc_stop(struct rte_eth_dev *dev) { struct igc_adapter *adapter = IGC_DEV_PRIVATE(dev); @@ -668,6 +668,8 @@ eth_igc_stop(struct rte_eth_dev *dev) rte_free(intr_handle->intr_vec); intr_handle->intr_vec = NULL; } + + return 0; } /* @@ -1173,13 +1175,17 @@ eth_igc_close(struct rte_eth_dev *dev) struct igc_hw *hw = IGC_DEV_PRIVATE_HW(dev); struct igc_adapter *adapter = IGC_DEV_PRIVATE(dev); int retry = 0; + int ret; PMD_INIT_FUNC_TRACE(); if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - if (!adapter->stopped) - eth_igc_stop(dev); + if (!adapter->stopped) { + ret = eth_igc_stop(dev); + if (ret != 0) + return ret; + } igc_flow_flush(dev, NULL); igc_clear_all_filter(dev); diff --git a/drivers/net/ionic/ionic_ethdev.c b/drivers/net/ionic/ionic_ethdev.c index ef7d06e526..23e785f6dd 100644 --- a/drivers/net/ionic/ionic_ethdev.c +++ b/drivers/net/ionic/ionic_ethdev.c @@ -24,7 +24,7 @@ static int ionic_dev_info_get(struct rte_eth_dev *eth_dev, 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 int ionic_dev_stop(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); @@ -940,7 +940,7 @@ ionic_dev_start(struct rte_eth_dev *eth_dev) /* * Stop device: disable rx and tx functions to allow for reconfiguring. */ -static void +static int ionic_dev_stop(struct rte_eth_dev *eth_dev) { struct ionic_lif *lif = IONIC_ETH_DEV_TO_LIF(eth_dev); @@ -951,6 +951,8 @@ ionic_dev_stop(struct rte_eth_dev *eth_dev) err = ionic_lif_stop(lif); if (err) IONIC_PRINT(ERR, "Cannot stop LIF: %d", err); + + return err; } /* diff --git a/drivers/net/ipn3ke/ipn3ke_representor.c b/drivers/net/ipn3ke/ipn3ke_representor.c index b9fb4d4e46..f15ee0728a 100644 --- a/drivers/net/ipn3ke/ipn3ke_representor.c +++ b/drivers/net/ipn3ke/ipn3ke_representor.c @@ -193,7 +193,7 @@ ipn3ke_rpst_dev_start(struct rte_eth_dev *dev) return 0; } -static void +static int ipn3ke_rpst_dev_stop(struct rte_eth_dev *dev) { struct ipn3ke_hw *hw = IPN3KE_DEV_PRIVATE_TO_HW(dev); @@ -206,6 +206,8 @@ ipn3ke_rpst_dev_stop(struct rte_eth_dev *dev) /* Disable the RX path */ ipn3ke_xmac_rx_disable(hw, rpst->port_id, 0); } + + return 0; } static int diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index 0b98e210e7..a07a9be9d4 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -142,13 +142,13 @@ static int ixgbe_fdir_filter_uninit(struct rte_eth_dev *eth_dev); static int ixgbe_l2_tn_filter_init(struct rte_eth_dev *eth_dev); static int ixgbe_l2_tn_filter_uninit(struct rte_eth_dev *eth_dev); static int ixgbe_ntuple_filter_uninit(struct rte_eth_dev *eth_dev); -static int ixgbe_dev_configure(struct rte_eth_dev *dev); -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 int ixgbe_dev_close(struct rte_eth_dev *dev); -static int ixgbe_dev_reset(struct rte_eth_dev *dev); +static int ixgbe_dev_configure(struct rte_eth_dev *dev); +static int ixgbe_dev_start(struct rte_eth_dev *dev); +static int 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 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); static int ixgbe_dev_allmulticast_enable(struct rte_eth_dev *dev); @@ -250,7 +250,7 @@ static int ixgbevf_dev_configure(struct rte_eth_dev *dev); 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 int ixgbevf_dev_stop(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); @@ -2845,7 +2845,7 @@ ixgbe_dev_start(struct rte_eth_dev *dev) /* * Stop device: disable rx and tx functions to allow for reconfiguring. */ -static void +static int ixgbe_dev_stop(struct rte_eth_dev *dev) { struct rte_eth_link link; @@ -2861,7 +2861,7 @@ ixgbe_dev_stop(struct rte_eth_dev *dev) IXGBE_DEV_PRIVATE_TO_TM_CONF(dev->data->dev_private); if (hw->adapter_stopped) - return; + return 0; PMD_INIT_FUNC_TRACE(); @@ -2917,6 +2917,8 @@ ixgbe_dev_stop(struct rte_eth_dev *dev) adapter->rss_reta_updated = 0; hw->adapter_stopped = true; + + return 0; } /* @@ -3000,7 +3002,9 @@ ixgbe_dev_close(struct rte_eth_dev *dev) ixgbe_pf_reset_hw(hw); - ixgbe_dev_stop(dev); + ret = ixgbe_dev_stop(dev); + if (ret != 0) + return ret; ixgbe_dev_free_queues(dev); @@ -5401,7 +5405,7 @@ ixgbevf_dev_start(struct rte_eth_dev *dev) return 0; } -static void +static int ixgbevf_dev_stop(struct rte_eth_dev *dev) { struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -5410,7 +5414,7 @@ ixgbevf_dev_stop(struct rte_eth_dev *dev) struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; if (hw->adapter_stopped) - return; + return 0; PMD_INIT_FUNC_TRACE(); @@ -5440,6 +5444,8 @@ ixgbevf_dev_stop(struct rte_eth_dev *dev) } adapter->rss_reta_updated = 0; + + return 0; } static int @@ -5448,6 +5454,7 @@ ixgbevf_dev_close(struct rte_eth_dev *dev) struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; + int ret; PMD_INIT_FUNC_TRACE(); if (rte_eal_process_type() != RTE_PROC_PRIMARY) @@ -5455,7 +5462,9 @@ ixgbevf_dev_close(struct rte_eth_dev *dev) ixgbe_reset_hw(hw); - ixgbevf_dev_stop(dev); + ret = ixgbevf_dev_stop(dev); + if (ret != 0) + return ret; ixgbe_dev_free_queues(dev); diff --git a/drivers/net/ixgbe/ixgbe_vf_representor.c b/drivers/net/ixgbe/ixgbe_vf_representor.c index edb5d43846..8185f0d3bb 100644 --- a/drivers/net/ixgbe/ixgbe_vf_representor.c +++ b/drivers/net/ixgbe/ixgbe_vf_representor.c @@ -113,8 +113,9 @@ static int ixgbe_vf_representor_dev_start(__rte_unused struct rte_eth_dev *dev) return 0; } -static void ixgbe_vf_representor_dev_stop(__rte_unused struct rte_eth_dev *dev) +static int ixgbe_vf_representor_dev_stop(__rte_unused struct rte_eth_dev *dev) { + return 0; } static int diff --git a/drivers/net/kni/rte_eth_kni.c b/drivers/net/kni/rte_eth_kni.c index be747adf86..9ff763df11 100644 --- a/drivers/net/kni/rte_eth_kni.c +++ b/drivers/net/kni/rte_eth_kni.c @@ -177,7 +177,7 @@ eth_kni_dev_start(struct rte_eth_dev *dev) return 0; } -static void +static int eth_kni_dev_stop(struct rte_eth_dev *dev) { struct pmd_internals *internals = dev->data->dev_private; @@ -196,6 +196,8 @@ eth_kni_dev_stop(struct rte_eth_dev *dev) } dev->data->dev_link.link_status = 0; + + return 0; } static int @@ -207,7 +209,9 @@ eth_kni_close(struct rte_eth_dev *eth_dev) if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - eth_kni_dev_stop(eth_dev); + ret = eth_kni_dev_stop(eth_dev); + if (ret != 0) + return ret; /* mac_addrs must not be freed alone because part of dev_private */ eth_dev->data->mac_addrs = NULL; @@ -485,6 +489,7 @@ eth_kni_remove(struct rte_vdev_device *vdev) { struct rte_eth_dev *eth_dev; const char *name; + int ret; name = rte_vdev_device_name(vdev); PMD_LOG(INFO, "Un-Initializing eth_kni for %s", name); @@ -493,7 +498,9 @@ eth_kni_remove(struct rte_vdev_device *vdev) eth_dev = rte_eth_dev_allocated(name); if (eth_dev != NULL) { if (rte_eal_process_type() != RTE_PROC_PRIMARY) { - eth_kni_dev_stop(eth_dev); + ret = eth_kni_dev_stop(eth_dev); + if (ret != 0) + return ret; return rte_eth_dev_release_port(eth_dev); } eth_kni_close(eth_dev); diff --git a/drivers/net/liquidio/lio_ethdev.c b/drivers/net/liquidio/lio_ethdev.c index 1a41f27198..ffdf72486d 100644 --- a/drivers/net/liquidio/lio_ethdev.c +++ b/drivers/net/liquidio/lio_ethdev.c @@ -1465,7 +1465,7 @@ lio_dev_start(struct rte_eth_dev *eth_dev) } /* Stop device and disable input/output functions */ -static void +static int lio_dev_stop(struct rte_eth_dev *eth_dev) { struct lio_device *lio_dev = LIO_DEV(eth_dev); @@ -1483,6 +1483,8 @@ lio_dev_stop(struct rte_eth_dev *eth_dev) /* Clear recorded link status */ lio_dev->linfo.link.link_status64 = 0; + + return 0; } static int @@ -1554,14 +1556,18 @@ static int lio_dev_close(struct rte_eth_dev *eth_dev) { struct lio_device *lio_dev = LIO_DEV(eth_dev); + int ret; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; lio_dev_info(lio_dev, "closing port %d\n", eth_dev->data->port_id); - if (lio_dev->intf_open) - lio_dev_stop(eth_dev); + if (lio_dev->intf_open) { + ret = lio_dev_stop(eth_dev); + if (ret != 0) + return ret; + } /* Reset ioq regs */ lio_dev->fn_list.setup_device_regs(lio_dev); @@ -1703,6 +1709,7 @@ static int lio_reconf_queues(struct rte_eth_dev *eth_dev, int num_txq, int num_rxq) { struct lio_device *lio_dev = LIO_DEV(eth_dev); + int ret; if (lio_dev->nb_rx_queues != num_rxq || lio_dev->nb_tx_queues != num_txq) { @@ -1712,8 +1719,11 @@ lio_reconf_queues(struct rte_eth_dev *eth_dev, int num_txq, int num_rxq) lio_dev->nb_tx_queues = num_txq; } - if (lio_dev->intf_open) - lio_dev_stop(eth_dev); + if (lio_dev->intf_open) { + ret = lio_dev_stop(eth_dev); + if (ret != 0) + return ret; + } /* Reset ioq registers */ if (lio_dev->fn_list.setup_device_regs(lio_dev)) { diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index cfcfb8a8fc..0857f5e1e3 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -81,7 +81,7 @@ const char *pmd_mlx4_init_params[] = { NULL, }; -static void mlx4_dev_stop(struct rte_eth_dev *dev); +static int mlx4_dev_stop(struct rte_eth_dev *dev); /** * Initialize shared data between primary and secondary process. @@ -343,13 +343,13 @@ mlx4_dev_start(struct rte_eth_dev *dev) * @param dev * Pointer to Ethernet device structure. */ -static void +static int mlx4_dev_stop(struct rte_eth_dev *dev) { struct mlx4_priv *priv = dev->data->dev_private; if (!priv->started) - return; + return 0; DEBUG("%p: detaching flows from all RX queues", (void *)dev); priv->started = 0; dev->tx_pkt_burst = mlx4_tx_burst_removed; @@ -360,6 +360,8 @@ mlx4_dev_stop(struct rte_eth_dev *dev) mlx4_flow_sync(priv, NULL); mlx4_rxq_intr_disable(priv); mlx4_rss_deinit(priv); + + return 0; } /** diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index 87d3c15f07..eb08de7ff3 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -1024,7 +1024,7 @@ void *mlx5_vlan_vmwa_init(struct rte_eth_dev *dev, uint32_t ifindex); /* mlx5_trigger.c */ int mlx5_dev_start(struct rte_eth_dev *dev); -void mlx5_dev_stop(struct rte_eth_dev *dev); +int mlx5_dev_stop(struct rte_eth_dev *dev); int mlx5_traffic_enable(struct rte_eth_dev *dev); void mlx5_traffic_disable(struct rte_eth_dev *dev); int mlx5_traffic_restart(struct rte_eth_dev *dev); diff --git a/drivers/net/mlx5/mlx5_trigger.c b/drivers/net/mlx5/mlx5_trigger.c index e72e5fbde2..7735f022a3 100644 --- a/drivers/net/mlx5/mlx5_trigger.c +++ b/drivers/net/mlx5/mlx5_trigger.c @@ -409,7 +409,7 @@ mlx5_dev_start(struct rte_eth_dev *dev) * @param dev * Pointer to Ethernet device structure. */ -void +int mlx5_dev_stop(struct rte_eth_dev *dev) { struct mlx5_priv *priv = dev->data->dev_private; @@ -434,6 +434,8 @@ mlx5_dev_stop(struct rte_eth_dev *dev) mlx5_txq_stop(dev); mlx5_rxq_stop(dev); mlx5_txpp_stop(dev); + + return 0; } /** diff --git a/drivers/net/mvneta/mvneta_ethdev.c b/drivers/net/mvneta/mvneta_ethdev.c index 607771149a..3e4ff6f01c 100644 --- a/drivers/net/mvneta/mvneta_ethdev.c +++ b/drivers/net/mvneta/mvneta_ethdev.c @@ -408,19 +408,21 @@ mvneta_dev_start(struct rte_eth_dev *dev) * @param dev * Pointer to Ethernet device structure. */ -static void +static int mvneta_dev_stop(struct rte_eth_dev *dev) { struct mvneta_priv *priv = dev->data->dev_private; if (!priv->ppio) - return; + return 0; mvneta_dev_set_link_down(dev); mvneta_flush_queues(dev); neta_ppio_deinit(priv->ppio); priv->ppio = NULL; + + return 0; } /** @@ -433,13 +435,16 @@ static int mvneta_dev_close(struct rte_eth_dev *dev) { struct mvneta_priv *priv = dev->data->dev_private; - int i; + int i, ret; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - if (priv->ppio) - mvneta_dev_stop(dev); + if (priv->ppio) { + ret = mvneta_dev_stop(dev); + if (ret != 0) + return ret; + } for (i = 0; i < dev->data->nb_rx_queues; i++) { mvneta_rx_queue_release(dev->data->rx_queues[i]); diff --git a/drivers/net/mvpp2/mrvl_ethdev.c b/drivers/net/mvpp2/mrvl_ethdev.c index a230a96840..d7973afe27 100644 --- a/drivers/net/mvpp2/mrvl_ethdev.c +++ b/drivers/net/mvpp2/mrvl_ethdev.c @@ -843,10 +843,10 @@ mrvl_flush_bpool(struct rte_eth_dev *dev) * @param dev * Pointer to Ethernet device structure. */ -static void +static int mrvl_dev_stop(struct rte_eth_dev *dev) { - mrvl_dev_set_link_down(dev); + return mrvl_dev_set_link_down(dev); } /** diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c index 5ae2d469c8..6f2f0108f5 100644 --- a/drivers/net/netvsc/hn_ethdev.c +++ b/drivers/net/netvsc/hn_ethdev.c @@ -827,7 +827,7 @@ hn_dev_start(struct rte_eth_dev *dev) return error; } -static void +static int hn_dev_stop(struct rte_eth_dev *dev) { struct hn_data *hv = dev->data->dev_private; @@ -835,7 +835,7 @@ hn_dev_stop(struct rte_eth_dev *dev) PMD_INIT_FUNC_TRACE(); hn_rndis_set_rxfilter(hv, 0); - hn_vf_stop(dev); + return hn_vf_stop(dev); } static int @@ -1046,7 +1046,9 @@ eth_hn_dev_uninit(struct rte_eth_dev *eth_dev) if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - hn_dev_stop(eth_dev); + ret = hn_dev_stop(eth_dev); + if (ret != 0) + return ret; hn_dev_close(eth_dev); eth_dev->dev_ops = NULL; diff --git a/drivers/net/netvsc/hn_var.h b/drivers/net/netvsc/hn_var.h index 4b63f87607..9f8b40c912 100644 --- a/drivers/net/netvsc/hn_var.h +++ b/drivers/net/netvsc/hn_var.h @@ -216,7 +216,7 @@ int hn_vf_configure(struct rte_eth_dev *dev, const uint32_t *hn_vf_supported_ptypes(struct rte_eth_dev *dev); int hn_vf_start(struct rte_eth_dev *dev); void hn_vf_reset(struct rte_eth_dev *dev); -void hn_vf_stop(struct rte_eth_dev *dev); +int hn_vf_stop(struct rte_eth_dev *dev); void hn_vf_close(struct rte_eth_dev *dev); int hn_vf_allmulticast_enable(struct rte_eth_dev *dev); diff --git a/drivers/net/netvsc/hn_vf.c b/drivers/net/netvsc/hn_vf.c index f5f15c0462..ce896a00bc 100644 --- a/drivers/net/netvsc/hn_vf.c +++ b/drivers/net/netvsc/hn_vf.c @@ -273,16 +273,23 @@ int hn_vf_start(struct rte_eth_dev *dev) return ret; } -void hn_vf_stop(struct rte_eth_dev *dev) +int hn_vf_stop(struct rte_eth_dev *dev) { struct hn_data *hv = dev->data->dev_private; struct rte_eth_dev *vf_dev; + int ret = 0; rte_rwlock_read_lock(&hv->vf_lock); vf_dev = hn_get_vf_dev(hv); - if (vf_dev) - rte_eth_dev_stop(vf_dev->data->port_id); + if (vf_dev) { + ret = rte_eth_dev_stop(vf_dev->data->port_id); + if (ret != 0) + PMD_DRV_LOG(ERR, "Failed to stop device on port %u", + vf_dev->data->port_id); + } rte_rwlock_read_unlock(&hv->vf_lock); + + return ret; } /* If VF is present, then cascade configuration down */ diff --git a/drivers/net/nfb/nfb_ethdev.c b/drivers/net/nfb/nfb_ethdev.c index a9a8bc878d..13f31de2c3 100644 --- a/drivers/net/nfb/nfb_ethdev.c +++ b/drivers/net/nfb/nfb_ethdev.c @@ -151,7 +151,7 @@ nfb_eth_dev_start(struct rte_eth_dev *dev) * @param dev * Pointer to Ethernet device structure. */ -static void +static int nfb_eth_dev_stop(struct rte_eth_dev *dev) { uint16_t i; @@ -163,6 +163,8 @@ nfb_eth_dev_stop(struct rte_eth_dev *dev) for (i = 0; i < nb_rx; i++) nfb_eth_rx_queue_stop(dev, i); + + return 0; } /** @@ -216,11 +218,14 @@ nfb_eth_dev_close(struct rte_eth_dev *dev) uint16_t i; uint16_t nb_rx = dev->data->nb_rx_queues; uint16_t nb_tx = dev->data->nb_tx_queues; + int ret; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - nfb_eth_dev_stop(dev); + ret = nfb_eth_dev_stop(dev); + if (ret != 0) + return ret; nfb_nc_rxmac_deinit(internals->rxmac, internals->max_rxmac); nfb_nc_txmac_deinit(internals->txmac, internals->max_txmac); diff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c index c1da66e3d6..38203777a3 100644 --- a/drivers/net/nfp/nfp_net.c +++ b/drivers/net/nfp/nfp_net.c @@ -80,7 +80,7 @@ static int nfp_net_start(struct rte_eth_dev *dev); static int nfp_net_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats); static int nfp_net_stats_reset(struct rte_eth_dev *dev); -static void nfp_net_stop(struct rte_eth_dev *dev); +static int nfp_net_stop(struct rte_eth_dev *dev); static uint16_t nfp_net_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts); @@ -788,7 +788,7 @@ nfp_net_start(struct rte_eth_dev *dev) } /* Stop device: disable rx and tx functions to allow for reconfiguring. */ -static void +static int nfp_net_stop(struct rte_eth_dev *dev) { int i; @@ -819,6 +819,8 @@ nfp_net_stop(struct rte_eth_dev *dev) nfp_eth_set_configured(dev->process_private, hw->pf_port_idx, 0); } + + return 0; } /* Set the link up. */ diff --git a/drivers/net/null/rte_eth_null.c b/drivers/net/null/rte_eth_null.c index 7c3c76a897..9ed88f110f 100644 --- a/drivers/net/null/rte_eth_null.c +++ b/drivers/net/null/rte_eth_null.c @@ -193,13 +193,15 @@ eth_dev_start(struct rte_eth_dev *dev) return 0; } -static void +static int eth_dev_stop(struct rte_eth_dev *dev) { if (dev == NULL) - return; + return 0; dev->data->dev_link.link_status = ETH_LINK_DOWN; + + return 0; } static int diff --git a/drivers/net/octeontx/octeontx_ethdev.c b/drivers/net/octeontx/octeontx_ethdev.c index aa9ef3bb70..3f08dfca57 100644 --- a/drivers/net/octeontx/octeontx_ethdev.c +++ b/drivers/net/octeontx/octeontx_ethdev.c @@ -676,7 +676,7 @@ octeontx_dev_start(struct rte_eth_dev *dev) return ret; } -static void +static int octeontx_dev_stop(struct rte_eth_dev *dev) { struct octeontx_nic *nic = octeontx_pmd_priv(dev); @@ -690,14 +690,14 @@ octeontx_dev_stop(struct rte_eth_dev *dev) if (ret < 0) { octeontx_log_err("failed to req stop port %d res=%d", nic->port_id, ret); - return; + return ret; } ret = octeontx_pki_port_stop(nic->port_id); if (ret < 0) { octeontx_log_err("failed to stop pki port %d res=%d", nic->port_id, ret); - return; + return ret; } ret = octeontx_pko_channel_stop(nic->base_ochan); @@ -705,8 +705,10 @@ octeontx_dev_stop(struct rte_eth_dev *dev) octeontx_log_err("failed to stop channel %d VF%d %d %d", nic->base_ochan, nic->port_id, nic->num_tx_queues, ret); - return; + return ret; } + + return 0; } static int diff --git a/drivers/net/octeontx2/otx2_ethdev.c b/drivers/net/octeontx2/otx2_ethdev.c index b69b92bf58..e52e1952ba 100644 --- a/drivers/net/octeontx2/otx2_ethdev.c +++ b/drivers/net/octeontx2/otx2_ethdev.c @@ -2139,7 +2139,7 @@ otx2_nix_rx_queue_stop(struct rte_eth_dev *eth_dev, uint16_t qidx) return rc; } -static void +static int otx2_nix_dev_stop(struct rte_eth_dev *eth_dev) { struct otx2_eth_dev *dev = otx2_eth_pmd_priv(eth_dev); @@ -2169,6 +2169,8 @@ otx2_nix_dev_stop(struct rte_eth_dev *eth_dev) /* Stop tx queues */ for (i = 0; i < eth_dev->data->nb_tx_queues; i++) otx2_nix_tx_queue_stop(eth_dev, i); + + return 0; } static int diff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c index 49764c0ee6..595474558b 100644 --- a/drivers/net/pcap/rte_eth_pcap.c +++ b/drivers/net/pcap/rte_eth_pcap.c @@ -607,7 +607,7 @@ eth_dev_start(struct rte_eth_dev *dev) * Is the only place for us to close all the tx streams dumpers. * If not called the dumpers will be flushed within each tx burst. */ -static void +static int eth_dev_stop(struct rte_eth_dev *dev) { unsigned int i; @@ -649,6 +649,8 @@ eth_dev_stop(struct rte_eth_dev *dev) dev->data->tx_queue_state[i] = RTE_ETH_QUEUE_STATE_STOPPED; dev->data->dev_link.link_status = ETH_LINK_DOWN; + + return 0; } static int diff --git a/drivers/net/pfe/pfe_ethdev.c b/drivers/net/pfe/pfe_ethdev.c index f0de1c8a2e..43c9fb84ec 100644 --- a/drivers/net/pfe/pfe_ethdev.c +++ b/drivers/net/pfe/pfe_ethdev.c @@ -373,7 +373,7 @@ pfe_eth_close_cdev(struct pfe_eth_priv_s *priv) } } -static void +static int pfe_eth_stop(struct rte_eth_dev *dev/*, int wake*/) { struct pfe_eth_priv_s *priv = dev->data->dev_private; @@ -383,11 +383,14 @@ pfe_eth_stop(struct rte_eth_dev *dev/*, int wake*/) dev->rx_pkt_burst = &pfe_dummy_recv_pkts; dev->tx_pkt_burst = &pfe_dummy_xmit_pkts; + + return 0; } static int pfe_eth_close(struct rte_eth_dev *dev) { + int ret; PMD_INIT_FUNC_TRACE(); if (!dev) @@ -399,7 +402,9 @@ pfe_eth_close(struct rte_eth_dev *dev) if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - pfe_eth_stop(dev); + ret = pfe_eth_stop(dev); + if (ret != 0) + return ret; /* Close the device file for link status */ pfe_eth_close_cdev(dev->data->dev_private); @@ -667,8 +672,7 @@ pfe_allmulticast_enable(struct rte_eth_dev *dev) static int pfe_link_down(struct rte_eth_dev *dev) { - pfe_eth_stop(dev); - return 0; + return pfe_eth_stop(dev); } static int @@ -843,7 +847,9 @@ pfe_eth_init(struct rte_vdev_device *vdev, struct pfe *pfe, int id) eth_dev->data->mtu = 1500; eth_dev->dev_ops = &ops; - pfe_eth_stop(eth_dev); + err = pfe_eth_stop(eth_dev); + if (err != 0) + goto err0; pfe_gemac_init(priv); eth_dev->data->nb_rx_queues = 1; diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c index 548497f3ae..ff2a5beea6 100644 --- a/drivers/net/qede/qede_ethdev.c +++ b/drivers/net/qede/qede_ethdev.c @@ -1163,7 +1163,7 @@ static int qede_dev_start(struct rte_eth_dev *eth_dev) return -1; /* common error code is < 0 */ } -static void qede_dev_stop(struct rte_eth_dev *eth_dev) +static int qede_dev_stop(struct rte_eth_dev *eth_dev) { struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev); struct ecore_dev *edev = QEDE_INIT_EDEV(qdev); @@ -1183,7 +1183,7 @@ static void qede_dev_stop(struct rte_eth_dev *eth_dev) /* Disable vport */ if (qede_activate_vport(eth_dev, false)) - return; + return 0; if (qdev->enable_lro) qede_enable_tpa(eth_dev, false); @@ -1195,6 +1195,8 @@ static void qede_dev_stop(struct rte_eth_dev *eth_dev) ecore_hw_stop_fastpath(edev); /* TBD - loop */ DP_INFO(edev, "Device is stopped\n"); + + return 0; } static const char * const valid_args[] = { @@ -1549,6 +1551,7 @@ 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); struct ecore_dev *edev = QEDE_INIT_EDEV(qdev); + int ret; PMD_INIT_FUNC_TRACE(edev); @@ -1561,8 +1564,11 @@ static int qede_dev_close(struct rte_eth_dev *eth_dev) * by the app without reconfiguration. However, in dev_close() we * can release all the resources and device can be brought up newly */ - if (eth_dev->data->dev_started) - qede_dev_stop(eth_dev); + if (eth_dev->data->dev_started) { + ret = qede_dev_stop(eth_dev); + if (ret != 0) + return ret; + } if (qdev->vport_started) qede_stop_vport(edev); diff --git a/drivers/net/ring/rte_eth_ring.c b/drivers/net/ring/rte_eth_ring.c index 22c0802688..8f7060340a 100644 --- a/drivers/net/ring/rte_eth_ring.c +++ b/drivers/net/ring/rte_eth_ring.c @@ -106,10 +106,11 @@ eth_dev_start(struct rte_eth_dev *dev) return 0; } -static void +static int eth_dev_stop(struct rte_eth_dev *dev) { dev->data->dev_link.link_status = ETH_LINK_DOWN; + return 0; } static int @@ -235,11 +236,14 @@ eth_dev_close(struct rte_eth_dev *dev) struct pmd_internals *internals = NULL; struct ring_queue *r = NULL; uint16_t i; + int ret; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - eth_dev_stop(dev); + ret = eth_dev_stop(dev); + if (ret != 0) + return ret; internals = dev->data->dev_private; if (internals->action == DEV_CREATE) { diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 165776b652..fed9fc370c 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -276,7 +276,7 @@ sfc_dev_link_update(struct rte_eth_dev *dev, int wait_to_complete) return ret; } -static void +static int sfc_dev_stop(struct rte_eth_dev *dev) { struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); @@ -288,6 +288,8 @@ sfc_dev_stop(struct rte_eth_dev *dev) sfc_adapter_unlock(sa); sfc_log_init(sa, "done"); + + return 0; } static int diff --git a/drivers/net/softnic/rte_eth_softnic.c b/drivers/net/softnic/rte_eth_softnic.c index e942df78b6..3387ab485f 100644 --- a/drivers/net/softnic/rte_eth_softnic.c +++ b/drivers/net/softnic/rte_eth_softnic.c @@ -178,7 +178,7 @@ pmd_dev_start(struct rte_eth_dev *dev) return 0; } -static void +static int pmd_dev_stop(struct rte_eth_dev *dev) { struct pmd_internals *p = dev->data->dev_private; @@ -199,6 +199,8 @@ pmd_dev_stop(struct rte_eth_dev *dev) tm_hierarchy_free(p); softnic_mtr_free(p); + + return 0; } static void diff --git a/drivers/net/szedata2/rte_eth_szedata2.c b/drivers/net/szedata2/rte_eth_szedata2.c index 0eecec1e8c..70fa072749 100644 --- a/drivers/net/szedata2/rte_eth_szedata2.c +++ b/drivers/net/szedata2/rte_eth_szedata2.c @@ -1013,18 +1013,27 @@ eth_dev_start(struct rte_eth_dev *dev) return ret; } -static void +static int eth_dev_stop(struct rte_eth_dev *dev) { uint16_t i; uint16_t nb_rx = dev->data->nb_rx_queues; uint16_t nb_tx = dev->data->nb_tx_queues; + int ret; - for (i = 0; i < nb_tx; i++) - eth_tx_queue_stop(dev, i); + for (i = 0; i < nb_tx; i++) { + ret = eth_tx_queue_stop(dev, i); + if (ret != 0) + return ret; + } - for (i = 0; i < nb_rx; i++) - eth_rx_queue_stop(dev, i); + for (i = 0; i < nb_rx; i++) { + ret = eth_rx_queue_stop(dev, i); + if (ret != 0) + return ret; + } + + return 0; } static int @@ -1162,11 +1171,14 @@ eth_dev_close(struct rte_eth_dev *dev) uint16_t i; uint16_t nb_rx = dev->data->nb_rx_queues; uint16_t nb_tx = dev->data->nb_tx_queues; + int ret; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - eth_dev_stop(dev); + ret = eth_dev_stop(dev); + if (ret != 0) + return ret; free(internals->sze_dev_path); diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c index e592a469b3..7047a42ce8 100644 --- a/drivers/net/tap/rte_eth_tap.c +++ b/drivers/net/tap/rte_eth_tap.c @@ -900,7 +900,7 @@ tap_dev_start(struct rte_eth_dev *dev) /* This function gets called when the current port gets stopped. */ -static void +static int tap_dev_stop(struct rte_eth_dev *dev) { int i; @@ -912,6 +912,8 @@ tap_dev_stop(struct rte_eth_dev *dev) tap_intr_handle_set(dev, 0); tap_link_set_down(dev); + + return 0; } static int diff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c index cc6eb4ba24..7ff4cdcb86 100644 --- a/drivers/net/thunderx/nicvf_ethdev.c +++ b/drivers/net/thunderx/nicvf_ethdev.c @@ -44,7 +44,7 @@ #include "nicvf_svf.h" #include "nicvf_logs.h" -static void nicvf_dev_stop(struct rte_eth_dev *dev); +static int nicvf_dev_stop(struct rte_eth_dev *dev); static void nicvf_dev_stop_cleanup(struct rte_eth_dev *dev, bool cleanup); static void nicvf_vf_stop(struct rte_eth_dev *dev, struct nicvf *nic, bool cleanup); @@ -1789,12 +1789,14 @@ nicvf_dev_stop_cleanup(struct rte_eth_dev *dev, bool cleanup) PMD_INIT_LOG(ERR, "Failed to reclaim CPI config %d", ret); } -static void +static int nicvf_dev_stop(struct rte_eth_dev *dev) { PMD_INIT_FUNC_TRACE(); nicvf_dev_stop_cleanup(dev, false); + + return 0; } static void diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c index 66efecb320..f303caa5bf 100644 --- a/drivers/net/vhost/rte_eth_vhost.c +++ b/drivers/net/vhost/rte_eth_vhost.c @@ -1153,13 +1153,15 @@ eth_dev_start(struct rte_eth_dev *eth_dev) return 0; } -static void +static int eth_dev_stop(struct rte_eth_dev *dev) { struct pmd_internal *internal = dev->data->dev_private; rte_atomic32_set(&internal->started, 0); update_queuing_status(dev); + + return 0; } static int @@ -1167,7 +1169,7 @@ eth_dev_close(struct rte_eth_dev *dev) { struct pmd_internal *internal; struct internal_list *list; - unsigned int i; + unsigned int i, ret; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; @@ -1176,7 +1178,9 @@ eth_dev_close(struct rte_eth_dev *dev) if (!internal) return 0; - eth_dev_stop(dev); + ret = eth_dev_stop(dev); + if (ret != 0) + return ret; list = find_internal_resource(internal->iface_name); if (list) { diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c index 0236c756dc..64291a3adb 100644 --- a/drivers/net/virtio/virtio_ethdev.c +++ b/drivers/net/virtio/virtio_ethdev.c @@ -40,7 +40,7 @@ static int eth_virtio_dev_uninit(struct rte_eth_dev *eth_dev); static int virtio_dev_configure(struct rte_eth_dev *dev); static int virtio_dev_start(struct rte_eth_dev *dev); -static void virtio_dev_stop(struct rte_eth_dev *dev); +static int virtio_dev_stop(struct rte_eth_dev *dev); static int virtio_dev_promiscuous_enable(struct rte_eth_dev *dev); static int virtio_dev_promiscuous_disable(struct rte_eth_dev *dev); static int virtio_dev_allmulticast_enable(struct rte_eth_dev *dev); @@ -1993,12 +1993,15 @@ eth_virtio_dev_init(struct rte_eth_dev *eth_dev) static int eth_virtio_dev_uninit(struct rte_eth_dev *eth_dev) { + int ret; PMD_INIT_FUNC_TRACE(); if (rte_eal_process_type() == RTE_PROC_SECONDARY) return 0; - virtio_dev_stop(eth_dev); + ret = virtio_dev_stop(eth_dev); + if (ret != 0) + return ret; virtio_dev_close(eth_dev); eth_dev->dev_ops = NULL; @@ -2515,7 +2518,7 @@ static void virtio_dev_free_mbufs(struct rte_eth_dev *dev) /* * Stop device: disable interrupt and mark link down */ -static void +static int virtio_dev_stop(struct rte_eth_dev *dev) { struct virtio_hw *hw = dev->data->dev_private; @@ -2544,6 +2547,8 @@ virtio_dev_stop(struct rte_eth_dev *dev) rte_eth_linkstatus_set(dev, &link); out_unlock: rte_spinlock_unlock(&hw->state_lock); + + return 0; } static int diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c index fa950e1ba0..ad05fe08b9 100644 --- a/drivers/net/vmxnet3/vmxnet3_ethdev.c +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c @@ -63,7 +63,7 @@ static int eth_vmxnet3_dev_init(struct rte_eth_dev *eth_dev); 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 int vmxnet3_dev_stop(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); @@ -814,7 +814,7 @@ vmxnet3_dev_start(struct rte_eth_dev *dev) /* * Stop device: disable rx and tx functions to allow for reconfiguring. */ -static void +static int vmxnet3_dev_stop(struct rte_eth_dev *dev) { struct rte_eth_link link; @@ -824,7 +824,7 @@ vmxnet3_dev_stop(struct rte_eth_dev *dev) if (hw->adapter_stopped == 1) { PMD_INIT_LOG(DEBUG, "Device already stopped."); - return; + return 0; } /* disable interrupts */ @@ -858,6 +858,8 @@ vmxnet3_dev_stop(struct rte_eth_dev *dev) rte_eth_linkstatus_set(dev, &link); hw->adapter_stopped = 1; + + return 0; } static void @@ -888,11 +890,14 @@ vmxnet3_free_queues(struct rte_eth_dev *dev) static int vmxnet3_dev_close(struct rte_eth_dev *dev) { + int ret; PMD_INIT_FUNC_TRACE(); if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - vmxnet3_dev_stop(dev); + ret = vmxnet3_dev_stop(dev); + if (ret != 0) + return ret; vmxnet3_free_queues(dev); return 0; diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index 2226e429ba..61a20653f4 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -1719,6 +1719,7 @@ int rte_eth_dev_stop(uint16_t port_id) { struct rte_eth_dev *dev; + int ret; RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); dev = &rte_eth_devices[port_id]; @@ -1733,10 +1734,10 @@ rte_eth_dev_stop(uint16_t port_id) } dev->data->dev_started = 0; - (*dev->dev_ops->dev_stop)(dev); - rte_ethdev_trace_stop(port_id); + ret = (*dev->dev_ops->dev_stop)(dev); + rte_ethdev_trace_stop(port_id, ret); - return 0; + return ret; } int diff --git a/lib/librte_ethdev/rte_ethdev_driver.h b/lib/librte_ethdev/rte_ethdev_driver.h index 35cc4fb186..1c1c10d583 100644 --- a/lib/librte_ethdev/rte_ethdev_driver.h +++ b/lib/librte_ethdev/rte_ethdev_driver.h @@ -33,7 +33,7 @@ typedef int (*eth_dev_configure_t)(struct rte_eth_dev *dev); typedef int (*eth_dev_start_t)(struct rte_eth_dev *dev); /**< @internal Function used to start a configured Ethernet device. */ -typedef void (*eth_dev_stop_t)(struct rte_eth_dev *dev); +typedef int (*eth_dev_stop_t)(struct rte_eth_dev *dev); /**< @internal Function used to stop a configured Ethernet device. */ typedef int (*eth_dev_set_link_up_t)(struct rte_eth_dev *dev); diff --git a/lib/librte_ethdev/rte_ethdev_trace.h b/lib/librte_ethdev/rte_ethdev_trace.h index 16f5bf24b9..0036bda746 100644 --- a/lib/librte_ethdev/rte_ethdev_trace.h +++ b/lib/librte_ethdev/rte_ethdev_trace.h @@ -77,8 +77,9 @@ RTE_TRACE_POINT( RTE_TRACE_POINT( rte_ethdev_trace_stop, - RTE_TRACE_POINT_ARGS(uint16_t port_id), + RTE_TRACE_POINT_ARGS(uint16_t port_id, int ret), rte_trace_point_emit_u16(port_id); + rte_trace_point_emit_int(ret); ) RTE_TRACE_POINT(