From patchwork Tue Sep 10 08:25:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 59059 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C0B711ED1D; Tue, 10 Sep 2019 10:26:25 +0200 (CEST) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 6DD2C1EC22 for ; Tue, 10 Sep 2019 10:26:20 +0200 (CEST) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us2.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 3D52A1C0069; Tue, 10 Sep 2019 08:26:19 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Tue, 10 Sep 2019 01:26:16 -0700 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Tue, 10 Sep 2019 01:26:16 -0700 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x8A8QESw002219; Tue, 10 Sep 2019 09:26:14 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id CE6AF1613D2; Tue, 10 Sep 2019 09:26:14 +0100 (BST) From: Andrew Rybchenko To: Wenzhuo Lu , Jingjing Wu , Bernard Iremonger CC: , Igor Romanov Date: Tue, 10 Sep 2019 09:25:43 +0100 Message-ID: <1568103959-25572-4-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1568103959-25572-1-git-send-email-arybchenko@solarflare.com> References: <1568103959-25572-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24898.005 X-TM-AS-Result: No-10.742200-4.000000-10 X-TMASE-MatchedRID: lZQXsOY9JGPDOgXZFRFV826HurDH4PpP57BplDPz0BDg91xayX4L85GW qGxfG/4gM22M43riQ2pURYNSY0mK56rpbcAnxpVuPwKTD1v8YV5MkOX0UoduuTbpMgyAfh26XOU bNKHXyRqqQx9ElEpmA8ldmexlvb+4SkJz50w3SpEZSSlznqUtbWcCy3wC35zduSIn8GC9fqv71G pSv+DMDMtych7JTK7QWxJjxfdFXl5F9nnmLepmE3Gg/sD2gWLWBGvINcfHqhcOkJQR4QWbsON7x qD5/++Z9rOOao+AG9OwLDCXsKwkDB6kTThkAlz/B7TqRAYVohZQ4asQfcq3nJsoi2XrUn/Jn6Kd MrRsL14qtq5d3cxkNaDjb4oyKcfRAt/GKvI4Y04FT86l5yHp38tPhfz3VXBTecnjL7UR5c8= X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--10.742200-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24898.005 X-MDID: 1568103979-vaj7py4b67TR Subject: [dpdk-dev] [PATCH 03/18] app/testpmd: check status of getting link info 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: Igor Romanov Add a wrapper for rte_eth_eth_link_get_nowait() that prints an error and returns a status code if the function fails. Signed-off-by: Igor Romanov Signed-off-by: Andrew Rybchenko --- app/test-pmd/config.c | 13 ++++++++++--- app/test-pmd/softnicfwd.c | 16 +++++++++++++--- app/test-pmd/testpmd.c | 10 +++++++++- app/test-pmd/testpmd.h | 1 + app/test-pmd/util.c | 14 ++++++++++++++ 5 files changed, 47 insertions(+), 7 deletions(-) diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 857b6dabc..33a4e9827 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -484,7 +484,9 @@ port_infos_display(portid_t port_id) return; } port = &ports[port_id]; - rte_eth_link_get_nowait(port_id, &link); + ret = eth_link_get_nowait_print_err(port_id, &link); + if (ret < 0) + return; ret = eth_dev_info_get_print_err(port_id, &dev_info); if (ret != 0) @@ -635,7 +637,9 @@ port_summary_display(portid_t port_id) return; } - rte_eth_link_get_nowait(port_id, &link); + ret = eth_link_get_nowait_print_err(port_id, &link); + if (ret < 0) + return; ret = eth_dev_info_get_print_err(port_id, &dev_info); if (ret != 0) @@ -3521,10 +3525,13 @@ set_queue_rate_limit(portid_t port_id, uint16_t queue_idx, uint16_t rate) { int diag; struct rte_eth_link link; + int ret; if (port_id_is_invalid(port_id, ENABLED_WARN)) return 1; - rte_eth_link_get_nowait(port_id, &link); + ret = eth_link_get_nowait_print_err(port_id, &link); + if (ret < 0) + return 1; if (rate > link.link_speed) { printf("Invalid rate value:%u bigger than link speed: %u\n", rate, link.link_speed); diff --git a/app/test-pmd/softnicfwd.c b/app/test-pmd/softnicfwd.c index 94e6669d3..e9d437364 100644 --- a/app/test-pmd/softnicfwd.c +++ b/app/test-pmd/softnicfwd.c @@ -163,16 +163,22 @@ softnic_begin(void *arg __rte_unused) return 0; } -static void +static int set_tm_hiearchy_nodes_shaper_rate(portid_t port_id, struct tm_hierarchy *h) { struct rte_eth_link link_params; uint64_t tm_port_rate; + int ret; memset(&link_params, 0, sizeof(link_params)); - rte_eth_link_get(port_id, &link_params); + ret = rte_eth_link_get(port_id, &link_params); + if (ret < 0) { + printf("Error during getting device (port %u) link info: %s\n", + port_id, rte_strerror(-ret)); + return ret; + } tm_port_rate = (uint64_t)ETH_SPEED_NUM_10G * BYTES_IN_MBPS; /* Set tm hierarchy shapers rate */ @@ -183,6 +189,8 @@ set_tm_hiearchy_nodes_shaper_rate(portid_t port_id, = h->subport_node_shaper_rate / PIPE_NODES_PER_SUBPORT; h->tc_node_shaper_rate = h->pipe_node_shaper_rate; h->tc_node_shared_shaper_rate = h->subport_node_shaper_rate; + + return 0; } static int @@ -554,7 +562,9 @@ softport_tm_hierarchy_specify(portid_t port_id, memset(&h, 0, sizeof(struct tm_hierarchy)); /* TM hierarchy shapers rate */ - set_tm_hiearchy_nodes_shaper_rate(port_id, &h); + status = set_tm_hiearchy_nodes_shaper_rate(port_id, &h); + if (status) + return status; /* Add root node (level 0) */ status = softport_tm_root_node_add(port_id, &h, error); diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 2a57978fd..0f6e27962 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -2625,6 +2625,7 @@ check_all_ports_link_status(uint32_t port_mask) portid_t portid; uint8_t count, all_ports_up, print_flag = 0; struct rte_eth_link link; + int ret; printf("Checking link statuses...\n"); fflush(stdout); @@ -2634,7 +2635,14 @@ check_all_ports_link_status(uint32_t port_mask) if ((port_mask & (1 << portid)) == 0) continue; memset(&link, 0, sizeof(link)); - rte_eth_link_get_nowait(portid, &link); + ret = rte_eth_link_get_nowait(portid, &link); + if (ret < 0) { + all_ports_up = 0; + if (print_flag == 1) + printf("Port %u link get failed: %s\n", + portid, rte_strerror(-ret)); + continue; + } /* print link status if flag set */ if (print_flag == 1) { if (link.link_status) diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index f1529696f..c039e2961 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -826,6 +826,7 @@ int eth_dev_info_get_print_err(uint16_t port_id, struct rte_eth_dev_info *dev_info); void eth_set_promisc_mode(uint16_t port_id, int enable); void eth_set_allmulticast_mode(uint16_t port, int enable); +int eth_link_get_nowait_print_err(uint16_t port_id, struct rte_eth_link *link); /* Functions to manage the set of filtered Multicast MAC addresses */ diff --git a/app/test-pmd/util.c b/app/test-pmd/util.c index 1aec5d755..6c24bf8d9 100644 --- a/app/test-pmd/util.c +++ b/app/test-pmd/util.c @@ -277,3 +277,17 @@ eth_set_allmulticast_mode(uint16_t port, int enable) enable ? "enabling" : "disabling", port, rte_strerror(-ret)); } + +int +eth_link_get_nowait_print_err(uint16_t port_id, + struct rte_eth_link *link) +{ + int ret; + + ret = rte_eth_link_get_nowait(port_id, link); + if (ret < 0) + printf("Device (port %u) link get (without wait) failed: %s\n", + port_id, rte_strerror(-ret)); + + return ret; +}