All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Rybchenko <arybchenko@solarflare.com>
To: Wenzhuo Lu <wenzhuo.lu@intel.com>,
	Jingjing Wu <jingjing.wu@intel.com>,
	Bernard Iremonger <bernard.iremonger@intel.com>,
	Adrien Mazarguil <adrien.mazarguil@6wind.com>
Cc: <dev@dpdk.org>, Ivan Ilchenko <Ivan.Ilchenko@oktetlabs.com>
Subject: [dpdk-dev] [PATCH v4 03/54] app/testpmd: check status of getting ethdev info
Date: Thu, 12 Sep 2019 17:42:14 +0100	[thread overview]
Message-ID: <1568306586-27831-4-git-send-email-arybchenko@solarflare.com> (raw)
In-Reply-To: <1568306586-27831-1-git-send-email-arybchenko@solarflare.com>

From: Ivan Ilchenko <Ivan.Ilchenko@oktetlabs.com>

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.com>
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Acked-by: Bernard Iremonger <bernard.iremonger@intel.com>
---
 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 e4dda93a4..b1be6b4c8 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 495871394..369426cbd 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 523b3d376..24158e5f7 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 5244872c4..6c78dca76 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 e8e2a39b6..de91e1b72 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 ce13eb8e6..d73955da1 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 18dfdca08..009d22676 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


  parent reply	other threads:[~2019-09-12 16:44 UTC|newest]

Thread overview: 272+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-27 14:25 [dpdk-dev] [PATCH 00/51] ethdev: change rte_eth_dev_info_get() return value to int Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 01/51] " Andrew Rybchenko
2019-08-28  9:51   ` Jan Viktorin
2019-08-28 10:09     ` Andrew Rybchenko
2019-08-28 11:26       ` Jan Viktorin
2019-08-28 14:39         ` Andrew Rybchenko
2019-08-29 16:56           ` Thomas Monjalon
2019-09-02  9:33             ` Ferruh Yigit
2019-09-03 12:09               ` Andrew Rybchenko
2019-09-03 12:36                 ` Ferruh Yigit
2019-08-27 14:25 ` [dpdk-dev] [PATCH 02/51] app/testpmd: check status of getting ethdev info Andrew Rybchenko
2019-09-02 12:40   ` Ferruh Yigit
2019-09-03 11:59     ` Andrew Rybchenko
2019-09-30  8:43   ` Zhao1, Wei
2019-09-30  8:49     ` Zhang, Qi Z
2019-10-01  8:09       ` Andrew Rybchenko
2019-10-08  7:41       ` Zhao1, Wei
2019-08-27 14:25 ` [dpdk-dev] [PATCH 03/51] app/eventdev: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 04/51] kni: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 05/51] latency: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 06/51] pdump: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 07/51] ring: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 08/51] app/procinfo: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 09/51] app/test: check status of getting ethdev info in bonding Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 10/51] app/test: check ethdev info get result in event Rx adapter Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 11/51] net/bnxt: check status of getting ethdev info Andrew Rybchenko
2019-08-27 14:44   ` Somnath Kotur
2019-08-27 14:25 ` [dpdk-dev] [PATCH 12/51] net/bonding: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 13/51] net/netvsc: " Andrew Rybchenko
2019-08-27 20:17   ` Stephen Hemminger
2019-08-28  7:06     ` Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 14/51] net/softnic: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 15/51] examples/rxtx_callbacks: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 16/51] examples/l3fwd: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 17/51] examples/qos_meter: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 18/51] examples/ip_frag: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 19/51] examples/performance-thread: check dev info get result Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 20/51] examples/vmdq: check status of getting ethdev info Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 21/51] examples/distributor: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 22/51] examples/l3fwd-acl: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 23/51] examples/vm_power: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 24/51] examples/qos_sched: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 25/51] examples/flow_filtering: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 26/51] examples/l3fwd-power: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 27/51] examples/l2fwd: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 28/51] examples/skeleton: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 29/51] examples/vmdq_dcb: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 30/51] examples/ipv4_multicast: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 31/51] examples/l2fwd-jobstats: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 32/51] examples/bond: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 33/51] examples/eventdev: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 34/51] examples/ip_reassembly: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 35/51] examples/vhost: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 36/51] examples/ptpclient: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 37/51] examples/link_status_interrupt: check dev info get result Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 38/51] examples/tep_termination: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 39/51] examples/server_node_efd: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 40/51] examples/flow_classify: check status of getting ethdev info Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 41/51] examples/packet_ordering: check dev info get result Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 42/51] examples/l2fwd-crypto: check status of getting ethdev info Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 43/51] examples/multi_process: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 44/51] examples/ipsec-secgw: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 45/51] examples/netmap_compat: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 46/51] examples/l2fwd-keepalive: check dev info get result Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 47/51] examples/ip_pipeline: check status of getting ethdev info Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 48/51] examples/load_balancer: " Andrew Rybchenko
2019-08-27 14:26 ` [dpdk-dev] [PATCH 49/51] examples/kni: " Andrew Rybchenko
2019-08-27 14:26 ` [dpdk-dev] [PATCH 50/51] examples/ethtool: " Andrew Rybchenko
2019-08-27 14:26 ` [dpdk-dev] [PATCH 51/51] examples/exception_path: " Andrew Rybchenko
2019-08-27 20:47 ` [dpdk-dev] [PATCH 00/51] ethdev: change rte_eth_dev_info_get() return value to int Aaron Conole
2019-08-28  7:02   ` Andrew Rybchenko
2019-08-28 13:42     ` Aaron Conole
2019-08-28 14:29       ` Andrew Rybchenko
2019-08-29 17:05         ` Thomas Monjalon
2019-09-02 13:04           ` Ferruh Yigit
2019-09-03 12:27           ` Andrew Rybchenko
2019-09-03 13:58             ` Aaron Conole
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 00/54] " Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 01/54] ethdev: remove redundunt device info cleanup before get Andrew Rybchenko
2019-09-04  8:32     ` [dpdk-dev] [dpdk-stable] " Ferruh Yigit
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 02/54] ethdev: change rte_eth_dev_info_get() return value to int Andrew Rybchenko
2019-09-04 16:40     ` Ferruh Yigit
2019-09-06  7:30       ` Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 03/54] app/testpmd: check status of getting ethdev info Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 04/54] app/eventdev: " Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 05/54] kni: " Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 06/54] latency: " Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 07/54] pdump: " Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 08/54] ring: " Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 09/54] app/procinfo: " Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 10/54] app/test: check status of getting ethdev info in bonding Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 11/54] app/test: check ethdev info get result in event Rx adapter Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 12/54] net/bnxt: check status of getting ethdev info Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 13/54] net/bonding: " Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 14/54] net/failsafe: " Andrew Rybchenko
2019-09-03 14:20     ` Gaëtan Rivet
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 15/54] net/netvsc: " Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 16/54] net/softnic: " Andrew Rybchenko
2019-09-09  7:01     ` Singh, Jasvinder
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 17/54] ethdev: change eth_dev_infos_get_t to return int Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 18/54] examples/rxtx_callbacks: check status of getting ethdev info Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 19/54] examples/l3fwd: " Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 20/54] examples/qos_meter: " Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 21/54] examples/ip_frag: " Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 22/54] examples/performance-thread: check dev info get result Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 23/54] examples/vmdq: check status of getting ethdev info Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 24/54] examples/distributor: " Andrew Rybchenko
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 25/54] examples/l3fwd-acl: " Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 26/54] examples/vm_power: " Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 27/54] examples/qos_sched: " Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 28/54] examples/flow_filtering: " Andrew Rybchenko
2019-09-04  5:57     ` Ori Kam
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 29/54] examples/l3fwd-power: " Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 30/54] examples/l2fwd: " Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 31/54] examples/skeleton: " Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 32/54] examples/vmdq_dcb: " Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 33/54] examples/ipv4_multicast: " Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 34/54] examples/l2fwd-jobstats: " Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 35/54] examples/bond: " Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 36/54] examples/eventdev: " Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 37/54] examples/ip_reassembly: " Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 38/54] examples/vhost: " Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 39/54] examples/ptpclient: " Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 40/54] examples/link_status_interrupt: check dev info get result Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 41/54] examples/tep_termination: " Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 42/54] examples/server_node_efd: " Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 43/54] examples/flow_classify: check status of getting ethdev info Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 44/54] examples/packet_ordering: check dev info get result Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 45/54] examples/l2fwd-crypto: check status of getting ethdev info Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 46/54] examples/multi_process: " Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 47/54] examples/ipsec-secgw: " Andrew Rybchenko
2019-09-04  9:11     ` Akhil Goyal
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 48/54] examples/netmap_compat: " Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 49/54] examples/l2fwd-keepalive: check dev info get result Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 50/54] examples/ip_pipeline: check status of getting ethdev info Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 51/54] examples/load_balancer: " Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 52/54] examples/kni: " Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 53/54] examples/ethtool: " Andrew Rybchenko
2019-09-03 13:57   ` [dpdk-dev] [PATCH v2 54/54] examples/exception_path: " Andrew Rybchenko
2019-09-03 18:14   ` [dpdk-dev] [PATCH v2 00/54] ethdev: change rte_eth_dev_info_get() return value to int Aaron Conole
2019-09-03 18:24     ` Andrew Rybchenko
2019-09-03 20:06       ` Aaron Conole
2019-09-03 20:18         ` Thomas Monjalon
2019-09-04 13:07           ` Aaron Conole
2019-09-06  7:30 ` [dpdk-dev] [PATCH v3 " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 01/54] ethdev: remove redundunt device info cleanup before get Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 02/54] ethdev: change rte_eth_dev_info_get() return value to int Andrew Rybchenko
2019-09-09 16:27     ` Ferruh Yigit
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 03/54] app/testpmd: check status of getting ethdev info Andrew Rybchenko
2019-09-12 14:29     ` Iremonger, Bernard
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 04/54] app/eventdev: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 05/54] kni: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 06/54] latency: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 07/54] pdump: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 08/54] ring: " Andrew Rybchenko
2019-09-06  9:04     ` Bruce Richardson
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 09/54] app/procinfo: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 10/54] app/test: check status of getting ethdev info in bonding Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 11/54] app/test: check ethdev info get result in event Rx adapter Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 12/54] net/bnxt: check status of getting ethdev info Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 13/54] net/bonding: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 14/54] net/failsafe: " Andrew Rybchenko
2019-09-06  9:28     ` Gaëtan Rivet
2019-09-06 10:09       ` Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 15/54] net/netvsc: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 16/54] net/softnic: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 17/54] ethdev: change device info get callback to return int Andrew Rybchenko
2019-09-06 13:29     ` Aaron Conole
2019-09-06 13:33       ` Andrew Rybchenko
2019-09-06 14:07         ` Aaron Conole
2019-09-06 14:51           ` Ferruh Yigit
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 18/54] examples/rxtx_callbacks: check status of getting ethdev info Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 19/54] examples/l3fwd: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 20/54] examples/qos_meter: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 21/54] examples/ip_frag: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 22/54] examples/performance-thread: check dev info get result Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 23/54] examples/vmdq: check status of getting ethdev info Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 24/54] examples/distributor: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 25/54] examples/l3fwd-acl: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 26/54] examples/vm_power: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 27/54] examples/qos_sched: " Andrew Rybchenko
2019-09-09  7:04     ` Singh, Jasvinder
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 28/54] examples/flow_filtering: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 29/54] examples/l3fwd-power: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 30/54] examples/l2fwd: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 31/54] examples/skeleton: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 32/54] examples/vmdq_dcb: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 33/54] examples/ipv4_multicast: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 34/54] examples/l2fwd-jobstats: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 35/54] examples/bond: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 36/54] examples/eventdev: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 37/54] examples/ip_reassembly: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 38/54] examples/vhost: " Andrew Rybchenko
2019-09-10  4:53     ` Tiwei Bie
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 39/54] examples/ptpclient: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 40/54] examples/link_status_interrupt: check dev info get result Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 41/54] examples/tep_termination: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 42/54] examples/server_node_efd: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 43/54] examples/flow_classify: check status of getting ethdev info Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 44/54] examples/packet_ordering: check dev info get result Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 45/54] examples/l2fwd-crypto: check status of getting ethdev info Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 46/54] examples/multi_process: " Andrew Rybchenko
2019-09-06  7:30   ` [dpdk-dev] [PATCH v3 47/54] examples/ipsec-secgw: " Andrew Rybchenko
2019-09-06  7:31   ` [dpdk-dev] [PATCH v3 48/54] examples/netmap_compat: " Andrew Rybchenko
2019-09-06  7:31   ` [dpdk-dev] [PATCH v3 49/54] examples/l2fwd-keepalive: check dev info get result Andrew Rybchenko
2019-09-06  7:31   ` [dpdk-dev] [PATCH v3 50/54] examples/ip_pipeline: check status of getting ethdev info Andrew Rybchenko
2019-09-06  7:31   ` [dpdk-dev] [PATCH v3 51/54] examples/load_balancer: " Andrew Rybchenko
2019-09-06  7:31   ` [dpdk-dev] [PATCH v3 52/54] examples/kni: " Andrew Rybchenko
2019-09-06  7:31   ` [dpdk-dev] [PATCH v3 53/54] examples/ethtool: " Andrew Rybchenko
2019-09-06  7:31   ` [dpdk-dev] [PATCH v3 54/54] examples/exception_path: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 00/54] ethdev: change rte_eth_dev_info_get() return value to int Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 01/54] ethdev: remove redundunt device info cleanup before get Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 02/54] ethdev: change rte_eth_dev_info_get() return value to int Andrew Rybchenko
2019-09-13 10:18     ` Iremonger, Bernard
2019-09-13 10:36       ` Andrew Rybchenko
2019-09-13 10:46         ` Iremonger, Bernard
2019-09-13 10:47         ` Thomas Monjalon
2019-09-13 12:41           ` Ferruh Yigit
2019-09-12 16:42   ` Andrew Rybchenko [this message]
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 04/54] app/eventdev: check status of getting ethdev info Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 05/54] kni: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 06/54] latency: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 07/54] pdump: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 08/54] ring: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 09/54] app/procinfo: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 10/54] app/test: check status of getting ethdev info in bonding Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 11/54] app/test: check ethdev info get result in event Rx adapter Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 12/54] net/bnxt: check status of getting ethdev info Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 13/54] net/bonding: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 14/54] net/failsafe: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 15/54] net/netvsc: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 16/54] net/softnic: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 17/54] ethdev: change device info get callback to return int Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 18/54] examples/rxtx_callbacks: check status of getting ethdev info Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 19/54] examples/l3fwd: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 20/54] examples/qos_meter: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 21/54] examples/ip_frag: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 22/54] examples/performance-thread: check dev info get result Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 23/54] examples/vmdq: check status of getting ethdev info Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 24/54] examples/distributor: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 25/54] examples/l3fwd-acl: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 26/54] examples/vm_power: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 27/54] examples/qos_sched: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 28/54] examples/flow_filtering: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 29/54] examples/l3fwd-power: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 30/54] examples/l2fwd: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 31/54] examples/skeleton: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 32/54] examples/vmdq_dcb: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 33/54] examples/ipv4_multicast: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 34/54] examples/l2fwd-jobstats: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 35/54] examples/bond: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 36/54] examples/eventdev: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 37/54] examples/ip_reassembly: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 38/54] examples/vhost: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 39/54] examples/ptpclient: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 40/54] examples/link_status_interrupt: check dev info get result Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 41/54] examples/tep_termination: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 42/54] examples/server_node_efd: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 43/54] examples/flow_classify: check status of getting ethdev info Andrew Rybchenko
2019-09-13 10:06     ` Iremonger, Bernard
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 44/54] examples/packet_ordering: check dev info get result Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 45/54] examples/l2fwd-crypto: check status of getting ethdev info Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 46/54] examples/multi_process: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 47/54] examples/ipsec-secgw: " Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 48/54] examples/netmap_compat: " Andrew Rybchenko
2019-09-12 16:43   ` [dpdk-dev] [PATCH v4 49/54] examples/l2fwd-keepalive: check dev info get result Andrew Rybchenko
2019-09-12 16:43   ` [dpdk-dev] [PATCH v4 50/54] examples/ip_pipeline: check status of getting ethdev info Andrew Rybchenko
2019-09-12 16:43   ` [dpdk-dev] [PATCH v4 51/54] examples/load_balancer: " Andrew Rybchenko
2019-09-12 16:43   ` [dpdk-dev] [PATCH v4 52/54] examples/kni: " Andrew Rybchenko
2019-09-12 16:43   ` [dpdk-dev] [PATCH v4 53/54] examples/ethtool: " Andrew Rybchenko
2019-09-12 16:43   ` [dpdk-dev] [PATCH v4 54/54] examples/exception_path: " Andrew Rybchenko
2019-09-13 17:08   ` [dpdk-dev] [PATCH v4 00/54] ethdev: change rte_eth_dev_info_get() return value to int Ferruh Yigit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1568306586-27831-4-git-send-email-arybchenko@solarflare.com \
    --to=arybchenko@solarflare.com \
    --cc=Ivan.Ilchenko@oktetlabs.com \
    --cc=adrien.mazarguil@6wind.com \
    --cc=bernard.iremonger@intel.com \
    --cc=dev@dpdk.org \
    --cc=jingjing.wu@intel.com \
    --cc=wenzhuo.lu@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.