From e661a08ba9e66838ef06b6f8865c03da8b8c9e50 Mon Sep 17 00:00:00 2001 From: Igor Romanov Date: Tue, 10 Sep 2019 09:25:43 +0100 Subject: [PATCH] app/testpmd: check status of getting link info 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 | 13 +++++++++++++ 5 files changed, 46 insertions(+), 7 deletions(-) diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 857b6dabc9..33a4e98272 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 94e6669d38..e9d4373644 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 2a57978fdb..0f6e279620 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 ab93062923..9446d279fc 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -825,6 +825,7 @@ void setup_gso(const char *mode, portid_t port_id); 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); +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 4626751343..19d36777a9 100644 --- a/app/test-pmd/util.c +++ b/app/test-pmd/util.c @@ -261,3 +261,16 @@ eth_set_promisc_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; +}