DPDK patches and discussions
 help / color / 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 v2 03/54] app/testpmd: check status of getting ethdev info
Date: Tue, 3 Sep 2019 14:56:37 +0100
Message-ID: <1567519051-28189-4-git-send-email-arybchenko@solarflare.com> (raw)
In-Reply-To: <1567519051-28189-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>
---
 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      |  40 ++++++++++++---
 app/test-pmd/testpmd.h      |   3 ++
 app/test-pmd/util.c         |  28 ++++++++++-
 7 files changed, 237 insertions(+), 45 deletions(-)

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index e4dda93..b1be6b4 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -2181,6 +2181,7 @@ struct cmd_config_rss {
 	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 @@ struct cmd_config_rss {
 	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 @@ struct cmd_config_rss_hash_key {
 	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 @@ struct cmd_config_rss_reta {
 	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 @@ struct cmd_showport_reta {
 	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 @@ struct cmd_config_burst {
 	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 @@ struct cmd_config_burst {
 			 * 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 @@ struct cmd_csum_result {
 {
 	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 @@ struct cmd_csum_result {
 		(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 @@ struct cmd_csum_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 @@ struct cmd_csum_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 @@ struct cmd_tso_set_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 @@ struct cmd_tso_set_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 @@ struct cmd_tso_set_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 @@ struct cmd_tunnel_tso_set_result {
 {
 	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 @@ struct cmd_flow_director_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 @@ struct cmd_macsec_offload_on_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 (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 @@ struct cmd_macsec_offload_off_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 (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 @@ struct cmd_rx_offload_get_capa_result {
 	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 @@ struct cmd_rx_offload_get_configuration_result {
 	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 @@ struct cmd_rx_offload_get_configuration_result {
 	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 @@ struct cmd_config_per_port_rx_offload_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 @@ struct cmd_config_per_port_rx_offload_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 @@ struct cmd_config_per_queue_rx_offload_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 @@ struct cmd_config_per_queue_rx_offload_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 @@ struct cmd_tx_offload_get_capa_result {
 	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 @@ struct cmd_tx_offload_get_configuration_result {
 	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 @@ struct cmd_tx_offload_get_configuration_result {
 	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 @@ struct cmd_config_per_port_tx_offload_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 @@ struct cmd_config_per_port_tx_offload_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 @@ struct cmd_config_per_queue_tx_offload_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 @@ struct cmd_config_per_queue_tx_offload_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 4958713..369426c 100644
--- a/app/test-pmd/cmdline_flow.c
+++ b/app/test-pmd/cmdline_flow.c
@@ -3550,7 +3550,10 @@ static int comp_vc_action_rss_queue(struct context *, const struct 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 523b3d3..24158e5 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -471,6 +471,7 @@ static int bus_match_all(const struct rte_bus *bus, const void *data)
 	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 @@ static int bus_match_all(const struct rte_bus *bus, const void *data)
 	}
 	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 @@ static int bus_match_all(const struct rte_bus *bus, const void *data)
 	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 @@ static int bus_match_all(const struct rte_bus *bus, const void *data)
 	}
 
 	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 @@ static int bus_match_all(const struct rte_bus *bus, const void *data)
 {
 	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 @@ void print_valid_ports(void)
 {
 	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 @@ struct igb_ring_desc_16_bytes {
 #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 @@ struct igb_ring_desc_16_bytes {
 	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 @@ struct igb_ring_desc_16_bytes {
 {
 	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 @@ struct igb_ring_desc_16_bytes {
 {
 	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 @@ struct igb_ring_desc_16_bytes {
 {
 	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 @@ struct igb_ring_desc_16_bytes {
 {
 	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 @@ struct igb_ring_desc_16_bytes {
 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 @@ struct igb_ring_desc_16_bytes {
 		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 @@ struct igb_ring_desc_16_bytes {
 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 @@ struct igb_ring_desc_16_bytes {
 	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 5244872..6c78dca 100644
--- a/app/test-pmd/parameters.c
+++ b/app/test-pmd/parameters.c
@@ -562,6 +562,7 @@
 	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 @@
 					 * 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 e8e2a39..cbf73e6 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -1012,17 +1012,21 @@ struct extmem_param {
 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 @@ struct extmem_param {
 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 @@ struct extmem_param {
 	uint16_t data_size;
 	bool warning = 0;
 	int k;
+	int ret;
 
 	memset(port_per_socket,0,RTE_MAX_NUMA_NODES);
 
@@ -1136,7 +1145,10 @@ struct extmem_param {
 		/* 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, "FAIL from init_config()\n");
 
 		if (!(port->dev_info.tx_offload_capa &
 		      DEV_TX_OFFLOAD_MBUF_FAST_FREE))
@@ -1295,10 +1307,14 @@ struct extmem_param {
 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 +2943,16 @@ struct pmd_test_command {
 {
 	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 +3127,10 @@ uint8_t port_is_bonding_slave(portid_t slave_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 ce13eb8..d73955d 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -822,6 +822,9 @@ void port_rss_hash_key_update(portid_t port_id, char rss_type[],
 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 18dfdca..009d226 100644
--- a/app/test-pmd/util.c
+++ b/app/test-pmd/util.c
@@ -194,10 +194,15 @@
 {
 	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 @@
 {
 	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 @@
 			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;
+}
-- 
1.8.3.1


  parent reply index

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   ` Andrew Rybchenko [this message]
2019-09-03 13:56   ` [dpdk-dev] [PATCH v2 04/54] app/eventdev: check status of getting ethdev info 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   ` [dpdk-dev] [PATCH v4 03/54] app/testpmd: check status of getting ethdev info Andrew Rybchenko
2019-09-12 16:42   ` [dpdk-dev] [PATCH v4 04/54] app/eventdev: " 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 publically 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=1567519051-28189-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

DPDK patches and discussions

Archives are clonable:
	git clone --mirror http://inbox.dpdk.org/dev/0 dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dev dev/ http://inbox.dpdk.org/dev \
		dev@dpdk.org
	public-inbox-index dev


Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/ public-inbox