All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Zhao1, Wei" <wei.zhao1@intel.com>
To: Andrew Rybchenko <arybchenko@solarflare.com>,
	"Lu, Wenzhuo" <wenzhuo.lu@intel.com>,
	"Wu, Jingjing" <jingjing.wu@intel.com>,
	"Iremonger, Bernard" <bernard.iremonger@intel.com>,
	Adrien Mazarguil <adrien.mazarguil@6wind.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>,
	Ivan Ilchenko <Ivan.Ilchenko@oktetlabs.ru>
Subject: Re: [dpdk-dev] [PATCH 02/51] app/testpmd: check status of getting	ethdev info
Date: Mon, 30 Sep 2019 08:43:48 +0000	[thread overview]
Message-ID: <A2573D2ACFCADC41BB3BE09C6DE313CA07F4CEFC@PGSMSX103.gar.corp.intel.com> (raw)
In-Reply-To: <1566915962-5472-3-git-send-email-arybchenko@solarflare.com>

Hi, Ivan Ilchenko and Andrew Rybchenko

An error is cause by this patch,  it is very easy to reappear.
You only need to bind a ixgbe nic driver , and run up testpmd:
./x86_64-native-linuxapp-gcc/app/testpmd  -c 0xff -n 4 -- -i --portmask=0xff  --rxq=8 --txq=8 --port-topology=loop

Then input a rte_flow rss action cmd:
flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / end actions rss queues 4 5 end / end
bad arguments  

so, rte_flow action rss can not be used after this patch.
 

> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Andrew Rybchenko
> Sent: Tuesday, August 27, 2019 10:25 PM
> To: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Wu, Jingjing
> <jingjing.wu@intel.com>; Iremonger, Bernard
> <bernard.iremonger@intel.com>; Adrien Mazarguil
> <adrien.mazarguil@6wind.com>
> Cc: dev@dpdk.org; Ivan Ilchenko <Ivan.Ilchenko@oktetlabs.ru>
> Subject: [dpdk-dev] [PATCH 02/51] app/testpmd: check status of getting
> ethdev info
> 
> From: Ivan Ilchenko <Ivan.Ilchenko@oktetlabs.ru>
> 
> Add eth_dev_info_get_print_err() which is a wrapper for
> rte_eth_dev_info_get() printing error if rte_eth_dev_info_get() fails and
> returning its status code.
> 
> Signed-off-by: Ivan Ilchenko <Ivan.Ilchenko@oktetlabs.ru>
> Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
> ---
>  app/test-pmd/cmdline.c      | 119
> ++++++++++++++++++++++++++++++++++++--------
>  app/test-pmd/cmdline_flow.c |   5 +-
>  app/test-pmd/config.c       |  78 ++++++++++++++++++++++++-----
>  app/test-pmd/parameters.c   |   8 ++-
>  app/test-pmd/testpmd.c      |  30 ++++++++---
>  app/test-pmd/testpmd.h      |   3 ++
>  app/test-pmd/util.c         |  28 ++++++++++-
>  7 files changed, 228 insertions(+), 43 deletions(-)
> 
> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index
> 56783aa..d4ab143 100644
> --- a/app/test-pmd/cmdline.c
> +++ b/app/test-pmd/cmdline.c
> @@ -2273,6 +2273,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 | @@ -2312,7
> +2313,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;
> 
> @@ -2410,9 +2414,13 @@ struct cmd_config_rss_hash_key {
>  	struct rte_eth_dev_info dev_info;
>  	uint8_t hash_key_size;
>  	uint32_t key_len;
> +	int ret;
> 
>  	memset(&dev_info, 0, sizeof(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;
> +
>  	if (dev_info.hash_key_size > 0 &&
>  			dev_info.hash_key_size <= sizeof(hash_key))
>  		hash_key_size = dev_info.hash_key_size; @@ -2945,7
> +2953,10 @@ struct cmd_config_rss_reta {
>  	struct cmd_config_rss_reta *res = parsed_result;
> 
>  	memset(&dev_info, 0, sizeof(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;
> +
>  	if (dev_info.reta_size == 0) {
>  		printf("Redirection table size is 0 which is "
>  					"invalid for RSS\n");
> @@ -3063,9 +3074,13 @@ 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;
> 
>  	memset(&dev_info, 0, sizeof(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;
> +
>  	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", @@ -
> 3292,6 +3307,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"); @@ -3305,7 +3321,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) {
> @@ -4375,6 +4394,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",
> @@ -4393,7 +4413,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 "
> @@ -4447,6 +4470,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); @@ -4457,7
> +4481,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"))
> @@ -4645,6 +4672,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;
> @@ -4656,7 +4684,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", @@ -
> 4677,7 +4708,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 "
> @@ -4746,7 +4780,8 @@ struct cmd_tunnel_tso_set_result {  {
>  	struct rte_eth_dev_info dev_info;
> 
> -	rte_eth_dev_info_get(port_id, &dev_info);
> +	eth_dev_info_get_print_err(port_id, &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); @@ -11184,7
> +11219,11 @@ struct cmd_flow_director_result {
>  			struct rte_eth_dev_info dev_info;
> 
>  			memset(&dev_info, 0, sizeof(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' ||
> @@ -14176,7 +14215,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); @@ -
> 14270,7 +14312,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);
> @@ -17980,8 +18025,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;
> 
> @@ -18053,6 +18102,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);
> 
> @@ -18061,7 +18111,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; @@ -18160,6
> +18213,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 "
> @@ -18173,7 +18227,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; @@ -
> 18261,6 +18318,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 "
> @@ -18268,7 +18326,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); @@ -18374,8
> +18435,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;
> 
> @@ -18447,6 +18512,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);
> 
> @@ -18455,7 +18521,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; @@ -18559,6
> +18628,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 "
> @@ -18572,7 +18642,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; @@ -
> 18663,6 +18736,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 "
> @@ -18670,7 +18744,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
> 1a5a5c1..0ef7c36 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();
> @@ -479,7 +480,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);
>  	memset(&dev_info, 0, sizeof(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;
> +
>  	printf("\n%s Infos for port %-2d %s\n",
>  	       info_border, port_id, info_border);
>  	rte_eth_macaddr_get(port_id, &mac_addr); @@ -618,6 +623,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();
> @@ -625,7 +631,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);
> 
> @@ -642,11 +652,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);
> @@ -1140,10 +1153,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); @@ -
> 1618,13 +1636,17 @@ 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;
> 
>  	memset(&dev_info, 0, sizeof(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 = @@ -1834,11 +1856,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; @@ -2796,11
> +2822,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] =
> @@ -2813,10 +2843,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] =
> @@ -2829,10 +2864,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, @@ -
> 2846,10 +2886,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, @@ -
> 3037,6 +3082,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;
> @@ -3048,7 +3094,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);
> @@ -3064,6 +3114,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;
> @@ -3072,7 +3123,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..0117236 100644
> --- a/app/test-pmd/testpmd.c
> +++ b/app/test-pmd/testpmd.c
> @@ -1016,7 +1016,8 @@ struct extmem_param {
>  	struct rte_eth_dev_info dev_info;
> 
>  	RTE_ETH_FOREACH_DEV(pi) {
> -		rte_eth_dev_info_get(pi, &dev_info);
> +		eth_dev_info_get_print_err(pi, &dev_info);
> +
>  		if (dev_info.max_rx_queues < allowed_max_rxq) {
>  			allowed_max_rxq = dev_info.max_rx_queues;
>  			*pid = pi;
> @@ -1062,7 +1063,8 @@ struct extmem_param {
>  	struct rte_eth_dev_info dev_info;
> 
>  	RTE_ETH_FOREACH_DEV(pi) {
> -		rte_eth_dev_info_get(pi, &dev_info);
> +		eth_dev_info_get_print_err(pi, &dev_info);
> +
>  		if (dev_info.max_tx_queues < allowed_max_txq) {
>  			allowed_max_txq = dev_info.max_tx_queues;
>  			*pid = pi;
> @@ -1109,6 +1111,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 +1139,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)
> +			return;
> 
>  		if (!(port->dev_info.tx_offload_capa &
>  		      DEV_TX_OFFLOAD_MBUF_FAST_FREE)) @@ -1295,10
> +1301,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 +2937,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 +3121,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	other threads:[~2019-09-30  8:43 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 [this message]
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   ` [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 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=A2573D2ACFCADC41BB3BE09C6DE313CA07F4CEFC@PGSMSX103.gar.corp.intel.com \
    --to=wei.zhao1@intel.com \
    --cc=Ivan.Ilchenko@oktetlabs.ru \
    --cc=adrien.mazarguil@6wind.com \
    --cc=arybchenko@solarflare.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.