From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 947AAA2EDB for ; Fri, 6 Sep 2019 09:32:48 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 647B31F19A; Fri, 6 Sep 2019 09:32:18 +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 5336F1F169 for ; Fri, 6 Sep 2019 09:31:55 +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 EE4B7340058; Fri, 6 Sep 2019 07:31:53 +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; Fri, 6 Sep 2019 00:31:49 -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; Fri, 6 Sep 2019 00:31:49 -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 x867VmB5027646; Fri, 6 Sep 2019 08:31:48 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 07D261613D2; Fri, 6 Sep 2019 08:31:48 +0100 (BST) From: Andrew Rybchenko To: Wenzhuo Lu , Jingjing Wu , Bernard Iremonger , Adrien Mazarguil CC: , Ivan Ilchenko Date: Fri, 6 Sep 2019 08:30:15 +0100 Message-ID: <1567755066-31389-4-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1567755066-31389-1-git-send-email-arybchenko@solarflare.com> References: <1566915962-5472-1-git-send-email-arybchenko@solarflare.com> <1567755066-31389-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 Content-Type: text/plain X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24892.005 X-TM-AS-Result: No-14.553600-4.000000-10 X-TMASE-MatchedRID: B8X8QwH54GTDOgXZFRFV826HurDH4PpPIrMoP5XxqGfAlr9zf1x/liXD Fxgit6TpPqH3M3bmiaYDfZ2MQc5YmiHhSBQfglfsA9lly13c/gHkY2blxNFpRx9W4auM/sn0XWj vA8TpWFjZfxIlRtpm4wD/U58aWgn/rYhfqfvQWOk49w4rSKMAfXvEgoSBmr8BqPGqHIPGZiMN1+ txgSPbZNeZJ+oAAdV6W71X4IeTTjhD0//J+TGhsUV4CvmC4hgmNU8z+tFJHR3IPbn2oQhptYh+I SUliiI59XnJpdwd/gM8PbY2Y2AtpajlE6h86PHu8pRHzcG+oi3Lvfc3C6SWwkPJD9TF1GCw3ME6 Ad7WsxWJkGn3E5qSPYHr0AaPZMcMBlQJJazsxgEgCPGiZqtI8Eld5Rsl9tmX0SxMhOhuA0RLvjx Yy07359pz0yeurlyPjunU/4Wws/5vxiI0QxtHsBo8wYJxWb0O3FYvKmZiVnNvd96Stg5JD5PbVZ 6hX+VW6Jtdnd9aUj5V4HNAAEjuPmUlOh2o2oTOwY28o+cGA5pJJMOCxaJJx759Yrw3aQCHPd2Rg H2TXNWX+NK8dR1jtO5uNcrdN8PU+VKMpSY1MQiwVIp8Y8imtbqGBW9J0Yqjfkiy7TTogYZcpkb9 zUI7BB/UKrLc0QVEloQ8ELpWUDQbfxRFekDQQpixDyZ4rnsHghZKmuN2x5vc9j0JdwtdWaPFjJE Fr+olwXCBO/GKkVqOhzOa6g8KrWQupRkVPN8zAzo120ws85OcSoRvBQ9yZ3fJksHU+Um7q+YyTw 91nXY= X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--14.553600-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24892.005 X-MDID: 1567755114-9HJAFtb5plsv Subject: [dpdk-dev] [PATCH v3 03/54] app/testpmd: check status of getting ethdev 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: Ivan Ilchenko 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 Signed-off-by: Andrew Rybchenko --- app/test-pmd/cmdline.c | 120 +++++++++++++++++++++++++++++------- app/test-pmd/cmdline_flow.c | 5 +- app/test-pmd/config.c | 78 +++++++++++++++++++---- app/test-pmd/parameters.c | 8 ++- app/test-pmd/testpmd.c | 41 +++++++++--- app/test-pmd/testpmd.h | 3 + app/test-pmd/util.c | 28 ++++++++- 7 files changed, 238 insertions(+), 45 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index e4dda93a49..b1be6b4c82 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -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); diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index 495871394e..369426cbdf 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -3550,7 +3550,10 @@ parse_vc_action_rss(struct context *ctx, const struct token *token, ctx->port != (portid_t)RTE_PORT_ALL) { struct rte_eth_dev_info info; - rte_eth_dev_info_get(ctx->port, &info); + ret = rte_eth_dev_info_get(ctx->port, &info); + if (ret != 0) + return ret; + action_rss_data->conf.key_len = RTE_MIN(sizeof(action_rss_data->key), info.hash_key_size); diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 523b3d3761..24158e5f7d 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -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); diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index 5244872c4a..6c78dca765 100644 --- a/app/test-pmd/parameters.c +++ b/app/test-pmd/parameters.c @@ -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; diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index e8e2a39b64..de91e1b72d 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -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. diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index ce13eb8e6a..d73955da14 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -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); diff --git a/app/test-pmd/util.c b/app/test-pmd/util.c index 18dfdca08d..009d226764 100644 --- a/app/test-pmd/util.c +++ b/app/test-pmd/util.c @@ -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; +} -- 2.17.1