app/testpmd: check status of getting link info
authorIgor Romanov <igor.romanov@oktetlabs.ru>
Tue, 10 Sep 2019 08:25:43 +0000 (09:25 +0100)
committerFerruh Yigit <ferruh.yigit@intel.com>
Mon, 7 Oct 2019 13:00:54 +0000 (15:00 +0200)
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 <igor.romanov@oktetlabs.ru>
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
app/test-pmd/config.c
app/test-pmd/softnicfwd.c
app/test-pmd/testpmd.c
app/test-pmd/testpmd.h
app/test-pmd/util.c

index 857b6da..33a4e98 100644 (file)
@@ -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);
index 94e6669..e9d4373 100644 (file)
@@ -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);
index 2a57978..0f6e279 100644 (file)
@@ -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)
index ab93062..9446d27 100644 (file)
@@ -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 */
index 4626751..19d3677 100644 (file)
@@ -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;
+}