app/testpmd: check status of getting ethdev info
authorIvan Ilchenko <ivan.ilchenko@oktetlabs.ru>
Thu, 12 Sep 2019 16:42:14 +0000 (17:42 +0100)
committerFerruh Yigit <ferruh.yigit@intel.com>
Mon, 7 Oct 2019 12:45:35 +0000 (14:45 +0200)
Add eth_dev_info_get_print_err() which is a wrapper for
rte_eth_dev_info_get() printing error if rte_eth_dev_info_get()
fails and returning its status code.

Signed-off-by: Ivan Ilchenko <ivan.ilchenko@oktetlabs.ru>
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Acked-by: Bernard Iremonger <bernard.iremonger@intel.com>
app/test-pmd/cmdline.c
app/test-pmd/cmdline_flow.c
app/test-pmd/config.c
app/test-pmd/parameters.c
app/test-pmd/testpmd.c
app/test-pmd/testpmd.h
app/test-pmd/util.c

index e4dda93..b1be6b4 100644 (file)
@@ -2181,6 +2181,7 @@ cmd_config_rss_parsed(void *parsed_result,
        int all_updated = 1;
        int diag;
        uint16_t i;
+       int ret;
 
        if (!strcmp(res->value, "all"))
                rss_conf.rss_hf = ETH_RSS_IP | ETH_RSS_TCP |
@@ -2220,7 +2221,10 @@ cmd_config_rss_parsed(void *parsed_result,
        RTE_ETH_FOREACH_DEV(i) {
                struct rte_eth_rss_conf local_rss_conf;
 
-               rte_eth_dev_info_get(i, &dev_info);
+               ret = eth_dev_info_get_print_err(i, &dev_info);
+               if (ret != 0)
+                       return;
+
                if (use_default)
                        rss_conf.rss_hf = dev_info.flow_type_rss_offloads;
 
@@ -2318,8 +2322,12 @@ cmd_config_rss_hash_key_parsed(void *parsed_result,
        struct rte_eth_dev_info dev_info;
        uint8_t hash_key_size;
        uint32_t key_len;
+       int ret;
+
+       ret = eth_dev_info_get_print_err(res->port_id, &dev_info);
+       if (ret != 0)
+               return;
 
-       rte_eth_dev_info_get(res->port_id, &dev_info);
        if (dev_info.hash_key_size > 0 &&
                        dev_info.hash_key_size <= sizeof(hash_key))
                hash_key_size = dev_info.hash_key_size;
@@ -2851,7 +2859,10 @@ cmd_set_rss_reta_parsed(void *parsed_result,
        struct rte_eth_rss_reta_entry64 reta_conf[8];
        struct cmd_config_rss_reta *res = parsed_result;
 
-       rte_eth_dev_info_get(res->port_id, &dev_info);
+       ret = eth_dev_info_get_print_err(res->port_id, &dev_info);
+       if (ret != 0)
+               return;
+
        if (dev_info.reta_size == 0) {
                printf("Redirection table size is 0 which is "
                                        "invalid for RSS\n");
@@ -2969,8 +2980,12 @@ cmd_showport_reta_parsed(void *parsed_result,
        struct rte_eth_rss_reta_entry64 reta_conf[8];
        struct rte_eth_dev_info dev_info;
        uint16_t max_reta_size;
+       int ret;
+
+       ret = eth_dev_info_get_print_err(res->port_id, &dev_info);
+       if (ret != 0)
+               return;
 
-       rte_eth_dev_info_get(res->port_id, &dev_info);
        max_reta_size = RTE_MIN(dev_info.reta_size, ETH_RSS_RETA_SIZE_512);
        if (res->size == 0 || res->size > max_reta_size) {
                printf("Invalid redirection table size: %u (1-%u)\n",
@@ -3197,6 +3212,7 @@ cmd_config_burst_parsed(void *parsed_result,
        struct cmd_config_burst *res = parsed_result;
        struct rte_eth_dev_info dev_info;
        uint16_t rec_nb_pkts;
+       int ret;
 
        if (!all_ports_stopped()) {
                printf("Please stop all ports first\n");
@@ -3210,7 +3226,10 @@ cmd_config_burst_parsed(void *parsed_result,
                         * size for all ports, so assume all ports are the same
                         * NIC model and use the values from Port 0.
                         */
-                       rte_eth_dev_info_get(0, &dev_info);
+                       ret = eth_dev_info_get_print_err(0, &dev_info);
+                       if (ret != 0)
+                               return;
+
                        rec_nb_pkts = dev_info.default_rxportconf.burst_size;
 
                        if (rec_nb_pkts == 0) {
@@ -4280,6 +4299,7 @@ csum_show(int port_id)
 {
        struct rte_eth_dev_info dev_info;
        uint64_t tx_offloads;
+       int ret;
 
        tx_offloads = ports[port_id].dev_conf.txmode.offloads;
        printf("Parse tunnel is %s\n",
@@ -4298,7 +4318,10 @@ csum_show(int port_id)
                (tx_offloads & DEV_TX_OFFLOAD_OUTER_UDP_CKSUM) ? "hw" : "sw");
 
        /* display warnings if configuration is not supported by the NIC */
-       rte_eth_dev_info_get(port_id, &dev_info);
+       ret = eth_dev_info_get_print_err(port_id, &dev_info);
+       if (ret != 0)
+               return;
+
        if ((tx_offloads & DEV_TX_OFFLOAD_IPV4_CKSUM) &&
                (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_IPV4_CKSUM) == 0) {
                printf("Warning: hardware IP checksum enabled but not "
@@ -4352,6 +4375,7 @@ cmd_csum_parsed(void *parsed_result,
        int hw = 0;
        uint64_t csum_offloads = 0;
        struct rte_eth_dev_info dev_info;
+       int ret;
 
        if (port_id_is_invalid(res->port_id, ENABLED_WARN)) {
                printf("invalid port %d\n", res->port_id);
@@ -4362,7 +4386,10 @@ cmd_csum_parsed(void *parsed_result,
                return;
        }
 
-       rte_eth_dev_info_get(res->port_id, &dev_info);
+       ret = eth_dev_info_get_print_err(res->port_id, &dev_info);
+       if (ret != 0)
+               return;
+
        if (!strcmp(res->mode, "set")) {
 
                if (!strcmp(res->hwsw, "hw"))
@@ -4550,6 +4577,7 @@ cmd_tso_set_parsed(void *parsed_result,
 {
        struct cmd_tso_set_result *res = parsed_result;
        struct rte_eth_dev_info dev_info;
+       int ret;
 
        if (port_id_is_invalid(res->port_id, ENABLED_WARN))
                return;
@@ -4561,7 +4589,10 @@ cmd_tso_set_parsed(void *parsed_result,
        if (!strcmp(res->mode, "set"))
                ports[res->port_id].tso_segsz = res->tso_segsz;
 
-       rte_eth_dev_info_get(res->port_id, &dev_info);
+       ret = eth_dev_info_get_print_err(res->port_id, &dev_info);
+       if (ret != 0)
+               return;
+
        if ((ports[res->port_id].tso_segsz != 0) &&
                (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_TCP_TSO) == 0) {
                printf("Error: TSO is not supported by port %d\n",
@@ -4582,7 +4613,10 @@ cmd_tso_set_parsed(void *parsed_result,
        cmd_config_queue_tx_offloads(&ports[res->port_id]);
 
        /* display warnings if configuration is not supported by the NIC */
-       rte_eth_dev_info_get(res->port_id, &dev_info);
+       ret = eth_dev_info_get_print_err(res->port_id, &dev_info);
+       if (ret != 0)
+               return;
+
        if ((ports[res->port_id].tso_segsz != 0) &&
                (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_TCP_TSO) == 0) {
                printf("Warning: TSO enabled but not "
@@ -4651,7 +4685,9 @@ check_tunnel_tso_nic_support(portid_t port_id)
 {
        struct rte_eth_dev_info dev_info;
 
-       rte_eth_dev_info_get(port_id, &dev_info);
+       if (eth_dev_info_get_print_err(port_id, &dev_info) != 0)
+               return dev_info;
+
        if (!(dev_info.tx_offload_capa & DEV_TX_OFFLOAD_VXLAN_TNL_TSO))
                printf("Warning: VXLAN TUNNEL TSO not supported therefore "
                       "not enabled for port %d\n", port_id);
@@ -11088,7 +11124,11 @@ cmd_flow_director_filter_parsed(void *parsed_result,
                else if (!strncmp(res->pf_vf, "vf", 2)) {
                        struct rte_eth_dev_info dev_info;
 
-                       rte_eth_dev_info_get(res->port_id, &dev_info);
+                       ret = eth_dev_info_get_print_err(res->port_id,
+                                               &dev_info);
+                       if (ret != 0)
+                               return;
+
                        errno = 0;
                        vf_id = strtoul(res->pf_vf + 2, &end, 10);
                        if (errno != 0 || *end != '\0' ||
@@ -14080,7 +14120,10 @@ cmd_set_macsec_offload_on_parsed(
                return;
        }
 
-       rte_eth_dev_info_get(port_id, &dev_info);
+       ret = eth_dev_info_get_print_err(port_id, &dev_info);
+       if (ret != 0)
+               return;
+
        if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MACSEC_INSERT) {
 #ifdef RTE_LIBRTE_IXGBE_PMD
                ret = rte_pmd_ixgbe_macsec_enable(port_id, en, rp);
@@ -14174,7 +14217,10 @@ cmd_set_macsec_offload_off_parsed(
                return;
        }
 
-       rte_eth_dev_info_get(port_id, &dev_info);
+       ret = eth_dev_info_get_print_err(port_id, &dev_info);
+       if (ret != 0)
+               return;
+
        if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MACSEC_INSERT) {
 #ifdef RTE_LIBRTE_IXGBE_PMD
                ret = rte_pmd_ixgbe_macsec_disable(port_id);
@@ -17884,8 +17930,12 @@ cmd_rx_offload_get_capa_parsed(
        portid_t port_id = res->port_id;
        uint64_t queue_offloads;
        uint64_t port_offloads;
+       int ret;
+
+       ret = eth_dev_info_get_print_err(port_id, &dev_info);
+       if (ret != 0)
+               return;
 
-       rte_eth_dev_info_get(port_id, &dev_info);
        queue_offloads = dev_info.rx_queue_offload_capa;
        port_offloads = dev_info.rx_offload_capa ^ queue_offloads;
 
@@ -17957,6 +18007,7 @@ cmd_rx_offload_get_configuration_parsed(
        uint64_t queue_offloads;
        uint16_t nb_rx_queues;
        int q;
+       int ret;
 
        printf("Rx Offloading Configuration of port %d :\n", port_id);
 
@@ -17965,7 +18016,10 @@ cmd_rx_offload_get_configuration_parsed(
        print_rx_offloads(port_offloads);
        printf("\n");
 
-       rte_eth_dev_info_get(port_id, &dev_info);
+       ret = eth_dev_info_get_print_err(port_id, &dev_info);
+       if (ret != 0)
+               return;
+
        nb_rx_queues = dev_info.nb_rx_queues;
        for (q = 0; q < nb_rx_queues; q++) {
                queue_offloads = port->rx_conf[q].offloads;
@@ -18064,6 +18118,7 @@ cmd_config_per_port_rx_offload_parsed(void *parsed_result,
        uint64_t single_offload;
        uint16_t nb_rx_queues;
        int q;
+       int ret;
 
        if (port->port_status != RTE_PORT_STOPPED) {
                printf("Error: Can't config offload when Port %d "
@@ -18077,7 +18132,10 @@ cmd_config_per_port_rx_offload_parsed(void *parsed_result,
                return;
        }
 
-       rte_eth_dev_info_get(port_id, &dev_info);
+       ret = eth_dev_info_get_print_err(port_id, &dev_info);
+       if (ret != 0)
+               return;
+
        nb_rx_queues = dev_info.nb_rx_queues;
        if (!strcmp(res->on_off, "on")) {
                port->dev_conf.rxmode.offloads |= single_offload;
@@ -18165,6 +18223,7 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result,
        uint16_t queue_id = res->queue_id;
        struct rte_port *port = &ports[port_id];
        uint64_t single_offload;
+       int ret;
 
        if (port->port_status != RTE_PORT_STOPPED) {
                printf("Error: Can't config offload when Port %d "
@@ -18172,7 +18231,10 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result,
                return;
        }
 
-       rte_eth_dev_info_get(port_id, &dev_info);
+       ret = eth_dev_info_get_print_err(port_id, &dev_info);
+       if (ret != 0)
+               return;
+
        if (queue_id >= dev_info.nb_rx_queues) {
                printf("Error: input queue_id should be 0 ... "
                       "%d\n", dev_info.nb_rx_queues - 1);
@@ -18278,8 +18340,12 @@ cmd_tx_offload_get_capa_parsed(
        portid_t port_id = res->port_id;
        uint64_t queue_offloads;
        uint64_t port_offloads;
+       int ret;
+
+       ret = eth_dev_info_get_print_err(port_id, &dev_info);
+       if (ret != 0)
+               return;
 
-       rte_eth_dev_info_get(port_id, &dev_info);
        queue_offloads = dev_info.tx_queue_offload_capa;
        port_offloads = dev_info.tx_offload_capa ^ queue_offloads;
 
@@ -18351,6 +18417,7 @@ cmd_tx_offload_get_configuration_parsed(
        uint64_t queue_offloads;
        uint16_t nb_tx_queues;
        int q;
+       int ret;
 
        printf("Tx Offloading Configuration of port %d :\n", port_id);
 
@@ -18359,7 +18426,10 @@ cmd_tx_offload_get_configuration_parsed(
        print_tx_offloads(port_offloads);
        printf("\n");
 
-       rte_eth_dev_info_get(port_id, &dev_info);
+       ret = eth_dev_info_get_print_err(port_id, &dev_info);
+       if (ret != 0)
+               return;
+
        nb_tx_queues = dev_info.nb_tx_queues;
        for (q = 0; q < nb_tx_queues; q++) {
                queue_offloads = port->tx_conf[q].offloads;
@@ -18463,6 +18533,7 @@ cmd_config_per_port_tx_offload_parsed(void *parsed_result,
        uint64_t single_offload;
        uint16_t nb_tx_queues;
        int q;
+       int ret;
 
        if (port->port_status != RTE_PORT_STOPPED) {
                printf("Error: Can't config offload when Port %d "
@@ -18476,7 +18547,10 @@ cmd_config_per_port_tx_offload_parsed(void *parsed_result,
                return;
        }
 
-       rte_eth_dev_info_get(port_id, &dev_info);
+       ret = eth_dev_info_get_print_err(port_id, &dev_info);
+       if (ret != 0)
+               return;
+
        nb_tx_queues = dev_info.nb_tx_queues;
        if (!strcmp(res->on_off, "on")) {
                port->dev_conf.txmode.offloads |= single_offload;
@@ -18567,6 +18641,7 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result,
        uint16_t queue_id = res->queue_id;
        struct rte_port *port = &ports[port_id];
        uint64_t single_offload;
+       int ret;
 
        if (port->port_status != RTE_PORT_STOPPED) {
                printf("Error: Can't config offload when Port %d "
@@ -18574,7 +18649,10 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result,
                return;
        }
 
-       rte_eth_dev_info_get(port_id, &dev_info);
+       ret = eth_dev_info_get_print_err(port_id, &dev_info);
+       if (ret != 0)
+               return;
+
        if (queue_id >= dev_info.nb_tx_queues) {
                printf("Error: input queue_id should be 0 ... "
                       "%d\n", dev_info.nb_tx_queues - 1);
index 4958713..932bdb9 100644 (file)
@@ -3549,8 +3549,12 @@ parse_vc_action_rss(struct context *ctx, const struct token *token,
        if (!port_id_is_invalid(ctx->port, DISABLED_WARN) &&
            ctx->port != (portid_t)RTE_PORT_ALL) {
                struct rte_eth_dev_info info;
+               int ret2;
+
+               ret2 = rte_eth_dev_info_get(ctx->port, &info);
+               if (ret2 != 0)
+                       return ret2;
 
-               rte_eth_dev_info_get(ctx->port, &info);
                action_rss_data->conf.key_len =
                        RTE_MIN(sizeof(action_rss_data->key),
                                info.hash_key_size);
index 523b3d3..24158e5 100644 (file)
@@ -471,6 +471,7 @@ port_infos_display(portid_t port_id)
        static const char *info_border = "*********************";
        uint16_t mtu;
        char name[RTE_ETH_NAME_MAX_LEN];
+       int ret;
 
        if (port_id_is_invalid(port_id, ENABLED_WARN)) {
                print_valid_ports();
@@ -478,7 +479,11 @@ port_infos_display(portid_t port_id)
        }
        port = &ports[port_id];
        rte_eth_link_get_nowait(port_id, &link);
-       rte_eth_dev_info_get(port_id, &dev_info);
+
+       ret = eth_dev_info_get_print_err(port_id, &dev_info);
+       if (ret != 0)
+               return;
+
        printf("\n%s Infos for port %-2d %s\n",
               info_border, port_id, info_border);
        rte_eth_macaddr_get(port_id, &mac_addr);
@@ -617,6 +622,7 @@ port_summary_display(portid_t port_id)
        struct rte_eth_link link;
        struct rte_eth_dev_info dev_info;
        char name[RTE_ETH_NAME_MAX_LEN];
+       int ret;
 
        if (port_id_is_invalid(port_id, ENABLED_WARN)) {
                print_valid_ports();
@@ -624,7 +630,11 @@ port_summary_display(portid_t port_id)
        }
 
        rte_eth_link_get_nowait(port_id, &link);
-       rte_eth_dev_info_get(port_id, &dev_info);
+
+       ret = eth_dev_info_get_print_err(port_id, &dev_info);
+       if (ret != 0)
+               return;
+
        rte_eth_dev_get_name_by_port(port_id, name);
        rte_eth_macaddr_get(port_id, &mac_addr);
 
@@ -641,11 +651,14 @@ port_offload_cap_display(portid_t port_id)
 {
        struct rte_eth_dev_info dev_info;
        static const char *info_border = "************";
+       int ret;
 
        if (port_id_is_invalid(port_id, ENABLED_WARN))
                return;
 
-       rte_eth_dev_info_get(port_id, &dev_info);
+       ret = eth_dev_info_get_print_err(port_id, &dev_info);
+       if (ret != 0)
+               return;
 
        printf("\n%s Port %d supported offload features: %s\n",
                info_border, port_id, info_border);
@@ -1139,10 +1152,15 @@ port_mtu_set(portid_t port_id, uint16_t mtu)
 {
        int diag;
        struct rte_eth_dev_info dev_info;
+       int ret;
 
        if (port_id_is_invalid(port_id, ENABLED_WARN))
                return;
-       rte_eth_dev_info_get(port_id, &dev_info);
+
+       ret = eth_dev_info_get_print_err(port_id, &dev_info);
+       if (ret != 0)
+               return;
+
        if (mtu > dev_info.max_mtu || mtu < dev_info.min_mtu) {
                printf("Set MTU failed. MTU:%u is not in valid range, min:%u - max:%u\n",
                        mtu, dev_info.min_mtu, dev_info.max_mtu);
@@ -1617,12 +1635,16 @@ ring_rx_descriptor_display(const struct rte_memzone *ring_mz,
 #endif
                           uint16_t desc_id)
 {
+       int ret;
        struct igb_ring_desc_16_bytes *ring =
                (struct igb_ring_desc_16_bytes *)ring_mz->addr;
 #ifndef RTE_LIBRTE_I40E_16BYTE_RX_DESC
        struct rte_eth_dev_info dev_info;
 
-       rte_eth_dev_info_get(port_id, &dev_info);
+       ret = eth_dev_info_get_print_err(port_id, &dev_info);
+       if (ret != 0)
+               return;
+
        if (strstr(dev_info.driver_name, "i40e") != NULL) {
                /* 32 bytes RX descriptor, i40e only */
                struct igb_ring_desc_32_bytes *ring =
@@ -1832,11 +1854,15 @@ port_rss_hash_conf_show(portid_t port_id, int show_rss_key)
        int diag;
        struct rte_eth_dev_info dev_info;
        uint8_t hash_key_size;
+       int ret;
 
        if (port_id_is_invalid(port_id, ENABLED_WARN))
                return;
 
-       rte_eth_dev_info_get(port_id, &dev_info);
+       ret = eth_dev_info_get_print_err(port_id, &dev_info);
+       if (ret != 0)
+               return;
+
        if (dev_info.hash_key_size > 0 &&
                        dev_info.hash_key_size <= sizeof(rss_key))
                hash_key_size = dev_info.hash_key_size;
@@ -2794,11 +2820,15 @@ add_rx_dump_callbacks(portid_t portid)
 {
        struct rte_eth_dev_info dev_info;
        uint16_t queue;
+       int ret;
 
        if (port_id_is_invalid(portid, ENABLED_WARN))
                return;
 
-       rte_eth_dev_info_get(portid, &dev_info);
+       ret = eth_dev_info_get_print_err(portid, &dev_info);
+       if (ret != 0)
+               return;
+
        for (queue = 0; queue < dev_info.nb_rx_queues; queue++)
                if (!ports[portid].rx_dump_cb[queue])
                        ports[portid].rx_dump_cb[queue] =
@@ -2811,10 +2841,15 @@ add_tx_dump_callbacks(portid_t portid)
 {
        struct rte_eth_dev_info dev_info;
        uint16_t queue;
+       int ret;
 
        if (port_id_is_invalid(portid, ENABLED_WARN))
                return;
-       rte_eth_dev_info_get(portid, &dev_info);
+
+       ret = eth_dev_info_get_print_err(portid, &dev_info);
+       if (ret != 0)
+               return;
+
        for (queue = 0; queue < dev_info.nb_tx_queues; queue++)
                if (!ports[portid].tx_dump_cb[queue])
                        ports[portid].tx_dump_cb[queue] =
@@ -2827,10 +2862,15 @@ remove_rx_dump_callbacks(portid_t portid)
 {
        struct rte_eth_dev_info dev_info;
        uint16_t queue;
+       int ret;
 
        if (port_id_is_invalid(portid, ENABLED_WARN))
                return;
-       rte_eth_dev_info_get(portid, &dev_info);
+
+       ret = eth_dev_info_get_print_err(portid, &dev_info);
+       if (ret != 0)
+               return;
+
        for (queue = 0; queue < dev_info.nb_rx_queues; queue++)
                if (ports[portid].rx_dump_cb[queue]) {
                        rte_eth_remove_rx_callback(portid, queue,
@@ -2844,10 +2884,15 @@ remove_tx_dump_callbacks(portid_t portid)
 {
        struct rte_eth_dev_info dev_info;
        uint16_t queue;
+       int ret;
 
        if (port_id_is_invalid(portid, ENABLED_WARN))
                return;
-       rte_eth_dev_info_get(portid, &dev_info);
+
+       ret = eth_dev_info_get_print_err(portid, &dev_info);
+       if (ret != 0)
+               return;
+
        for (queue = 0; queue < dev_info.nb_tx_queues; queue++)
                if (ports[portid].tx_dump_cb[queue]) {
                        rte_eth_remove_tx_callback(portid, queue,
@@ -3035,6 +3080,7 @@ void
 tx_vlan_set(portid_t port_id, uint16_t vlan_id)
 {
        struct rte_eth_dev_info dev_info;
+       int ret;
 
        if (port_id_is_invalid(port_id, ENABLED_WARN))
                return;
@@ -3046,7 +3092,11 @@ tx_vlan_set(portid_t port_id, uint16_t vlan_id)
                printf("Error, as QinQ has been enabled.\n");
                return;
        }
-       rte_eth_dev_info_get(port_id, &dev_info);
+
+       ret = eth_dev_info_get_print_err(port_id, &dev_info);
+       if (ret != 0)
+               return;
+
        if ((dev_info.tx_offload_capa & DEV_TX_OFFLOAD_VLAN_INSERT) == 0) {
                printf("Error: vlan insert is not supported by port %d\n",
                        port_id);
@@ -3062,6 +3112,7 @@ void
 tx_qinq_set(portid_t port_id, uint16_t vlan_id, uint16_t vlan_id_outer)
 {
        struct rte_eth_dev_info dev_info;
+       int ret;
 
        if (port_id_is_invalid(port_id, ENABLED_WARN))
                return;
@@ -3070,7 +3121,10 @@ tx_qinq_set(portid_t port_id, uint16_t vlan_id, uint16_t vlan_id_outer)
        if (vlan_id_is_invalid(vlan_id_outer))
                return;
 
-       rte_eth_dev_info_get(port_id, &dev_info);
+       ret = eth_dev_info_get_print_err(port_id, &dev_info);
+       if (ret != 0)
+               return;
+
        if ((dev_info.tx_offload_capa & DEV_TX_OFFLOAD_QINQ_INSERT) == 0) {
                printf("Error: qinq insert not supported by port %d\n",
                        port_id);
index 5244872..6c78dca 100644 (file)
@@ -562,6 +562,7 @@ launch_args_parse(int argc, char** argv)
        uint64_t tx_offloads = tx_mode.offloads;
        struct rte_eth_dev_info dev_info;
        uint16_t rec_nb_pkts;
+       int ret;
 
        static struct option lgopts[] = {
                { "help",                       0, 0, 0 },
@@ -1050,7 +1051,12 @@ launch_args_parse(int argc, char** argv)
                                         * value, on the assumption that all
                                         * ports are of the same NIC model.
                                         */
-                                       rte_eth_dev_info_get(0, &dev_info);
+                                       ret = eth_dev_info_get_print_err(
+                                                               0,
+                                                               &dev_info);
+                                       if (ret != 0)
+                                               return;
+
                                        rec_nb_pkts = dev_info
                                                .default_rxportconf.burst_size;
 
index e8e2a39..de91e1b 100644 (file)
@@ -1012,17 +1012,21 @@ queueid_t
 get_allowed_max_nb_rxq(portid_t *pid)
 {
        queueid_t allowed_max_rxq = MAX_QUEUE_ID;
+       bool max_rxq_valid = false;
        portid_t pi;
        struct rte_eth_dev_info dev_info;
 
        RTE_ETH_FOREACH_DEV(pi) {
-               rte_eth_dev_info_get(pi, &dev_info);
+               if (eth_dev_info_get_print_err(pi, &dev_info) != 0)
+                       continue;
+
+               max_rxq_valid = true;
                if (dev_info.max_rx_queues < allowed_max_rxq) {
                        allowed_max_rxq = dev_info.max_rx_queues;
                        *pid = pi;
                }
        }
-       return allowed_max_rxq;
+       return max_rxq_valid ? allowed_max_rxq : 0;
 }
 
 /*
@@ -1058,17 +1062,21 @@ queueid_t
 get_allowed_max_nb_txq(portid_t *pid)
 {
        queueid_t allowed_max_txq = MAX_QUEUE_ID;
+       bool max_txq_valid = false;
        portid_t pi;
        struct rte_eth_dev_info dev_info;
 
        RTE_ETH_FOREACH_DEV(pi) {
-               rte_eth_dev_info_get(pi, &dev_info);
+               if (eth_dev_info_get_print_err(pi, &dev_info) != 0)
+                       continue;
+
+               max_txq_valid = true;
                if (dev_info.max_tx_queues < allowed_max_txq) {
                        allowed_max_txq = dev_info.max_tx_queues;
                        *pid = pi;
                }
        }
-       return allowed_max_txq;
+       return max_txq_valid ? allowed_max_txq : 0;
 }
 
 /*
@@ -1109,6 +1117,7 @@ init_config(void)
        uint16_t data_size;
        bool warning = 0;
        int k;
+       int ret;
 
        memset(port_per_socket,0,RTE_MAX_NUMA_NODES);
 
@@ -1136,7 +1145,11 @@ init_config(void)
                /* Apply default TxRx configuration for all ports */
                port->dev_conf.txmode = tx_mode;
                port->dev_conf.rxmode = rx_mode;
-               rte_eth_dev_info_get(pid, &port->dev_info);
+
+               ret = eth_dev_info_get_print_err(pid, &port->dev_info);
+               if (ret != 0)
+                       rte_exit(EXIT_FAILURE,
+                                "rte_eth_dev_info_get() failed\n");
 
                if (!(port->dev_info.tx_offload_capa &
                      DEV_TX_OFFLOAD_MBUF_FAST_FREE))
@@ -1295,10 +1308,14 @@ void
 reconfig(portid_t new_port_id, unsigned socket_id)
 {
        struct rte_port *port;
+       int ret;
 
        /* Reconfiguration of Ethernet ports. */
        port = &ports[new_port_id];
-       rte_eth_dev_info_get(new_port_id, &port->dev_info);
+
+       ret = eth_dev_info_get_print_err(new_port_id, &port->dev_info);
+       if (ret != 0)
+               return;
 
        /* set flag to initialize port/queue */
        port->need_reconfig = 1;
@@ -2927,11 +2944,16 @@ init_port_config(void)
 {
        portid_t pid;
        struct rte_port *port;
+       int ret;
 
        RTE_ETH_FOREACH_DEV(pid) {
                port = &ports[pid];
                port->dev_conf.fdir_conf = fdir_conf;
-               rte_eth_dev_info_get(pid, &port->dev_info);
+
+               ret = eth_dev_info_get_print_err(pid, &port->dev_info);
+               if (ret != 0)
+                       return;
+
                if (nb_rxq > 1) {
                        port->dev_conf.rx_adv_conf.rss_conf.rss_key = NULL;
                        port->dev_conf.rx_adv_conf.rss_conf.rss_hf =
@@ -3106,7 +3128,10 @@ init_port_dcb_config(portid_t pid,
        retval = rte_eth_dev_configure(pid, nb_rxq, nb_rxq, &port_conf);
        if (retval < 0)
                return retval;
-       rte_eth_dev_info_get(pid, &rte_port->dev_info);
+
+       retval = eth_dev_info_get_print_err(pid, &rte_port->dev_info);
+       if (retval != 0)
+               return retval;
 
        /* If dev_info.vmdq_pool_base is greater than 0,
         * the queue id of vmdq pools is started after pf queues.
index ce13eb8..d73955d 100644 (file)
@@ -822,6 +822,9 @@ void setup_gro(const char *onoff, portid_t port_id);
 void setup_gro_flush_cycles(uint8_t cycles);
 void show_gro(portid_t port_id);
 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);
+
 
 /* Functions to manage the set of filtered Multicast MAC addresses */
 void mcast_addr_add(portid_t port_id, struct rte_ether_addr *mc_addr);
index 18dfdca..009d226 100644 (file)
@@ -194,10 +194,15 @@ add_tx_md_callback(portid_t portid)
 {
        struct rte_eth_dev_info dev_info;
        uint16_t queue;
+       int ret;
 
        if (port_id_is_invalid(portid, ENABLED_WARN))
                return;
-       rte_eth_dev_info_get(portid, &dev_info);
+
+       ret = eth_dev_info_get_print_err(portid, &dev_info);
+       if (ret != 0)
+               return;
+
        for (queue = 0; queue < dev_info.nb_tx_queues; queue++)
                if (!ports[portid].tx_set_md_cb[queue])
                        ports[portid].tx_set_md_cb[queue] =
@@ -210,10 +215,15 @@ remove_tx_md_callback(portid_t portid)
 {
        struct rte_eth_dev_info dev_info;
        uint16_t queue;
+       int ret;
 
        if (port_id_is_invalid(portid, ENABLED_WARN))
                return;
-       rte_eth_dev_info_get(portid, &dev_info);
+
+       ret = eth_dev_info_get_print_err(portid, &dev_info);
+       if (ret != 0)
+               return;
+
        for (queue = 0; queue < dev_info.nb_tx_queues; queue++)
                if (ports[portid].tx_set_md_cb[queue]) {
                        rte_eth_remove_tx_callback(portid, queue,
@@ -221,3 +231,17 @@ remove_tx_md_callback(portid_t portid)
                        ports[portid].tx_set_md_cb[queue] = NULL;
                }
 }
+
+int
+eth_dev_info_get_print_err(uint16_t port_id,
+                                       struct rte_eth_dev_info *dev_info)
+{
+       int ret;
+
+       ret = rte_eth_dev_info_get(port_id, dev_info);
+       if (ret != 0)
+               printf("Error during getting device (port %u) info: %s\n",
+                               port_id, strerror(-ret));
+
+       return ret;
+}