All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jie Wang <jie1x.wang@intel.com>
To: dev@dpdk.org
Cc: ferruh.yigit@intel.com, thomas@monjalon.net,
	andrew.rybchenko@oktetlabs.ru, xiaoyun.li@intel.com,
	stevex.yang@intel.com, Jie Wang <jie1x.wang@intel.com>
Subject: [dpdk-dev] [PATCH v13 2/2] app/testpmd: fix testpmd doesn't show RSS hash offload
Date: Thu, 14 Oct 2021 18:31:24 +0800	[thread overview]
Message-ID: <20211014103124.528877-3-jie1x.wang@intel.com> (raw)
In-Reply-To: <20211014103124.528877-1-jie1x.wang@intel.com>

The driver may change offloads info into dev->data->dev_conf
in dev_configure which may cause port->dev_conf and port->rx_conf
contain outdated values.

This patch updates the offloads info if it changes to fix this issue.

Fixes: ce8d561418d4 ("app/testpmd: add port configuration settings")

Signed-off-by: Jie Wang <jie1x.wang@intel.com>
---
 app/test-pmd/cmdline.c | 14 ++++++++++--
 app/test-pmd/testpmd.c | 48 +++++++++++++++++++++++++++++++++++++++---
 app/test-pmd/testpmd.h |  2 ++
 app/test-pmd/util.c    | 14 ++++++++++++
 4 files changed, 73 insertions(+), 5 deletions(-)

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 36d50fd3c7..b8f06063d2 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -16034,6 +16034,7 @@ cmd_rx_offload_get_configuration_parsed(
 	struct rte_eth_dev_info dev_info;
 	portid_t port_id = res->port_id;
 	struct rte_port *port = &ports[port_id];
+	struct rte_eth_conf dev_conf;
 	uint64_t port_offloads;
 	uint64_t queue_offloads;
 	uint16_t nb_rx_queues;
@@ -16042,7 +16043,11 @@ cmd_rx_offload_get_configuration_parsed(
 
 	printf("Rx Offloading Configuration of port %d :\n", port_id);
 
-	port_offloads = port->dev_conf.rxmode.offloads;
+	ret = eth_dev_conf_get_print_err(port_id, &dev_conf);
+	if (ret != 0)
+		return;
+
+	port_offloads = dev_conf.rxmode.offloads;
 	printf("  Port :");
 	print_rx_offloads(port_offloads);
 	printf("\n");
@@ -16448,6 +16453,7 @@ cmd_tx_offload_get_configuration_parsed(
 	struct rte_eth_dev_info dev_info;
 	portid_t port_id = res->port_id;
 	struct rte_port *port = &ports[port_id];
+	struct rte_eth_conf dev_conf;
 	uint64_t port_offloads;
 	uint64_t queue_offloads;
 	uint16_t nb_tx_queues;
@@ -16456,7 +16462,11 @@ cmd_tx_offload_get_configuration_parsed(
 
 	printf("Tx Offloading Configuration of port %d :\n", port_id);
 
-	port_offloads = port->dev_conf.txmode.offloads;
+	ret = eth_dev_conf_get_print_err(port_id, &dev_conf);
+	if (ret != 0)
+		return;
+
+	port_offloads = dev_conf.txmode.offloads;
 	printf("  Port :");
 	print_tx_offloads(port_offloads);
 	printf("\n");
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index a7841c557f..6cb00882bb 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -2582,6 +2582,9 @@ start_port(portid_t pid)
 		}
 
 		if (port->need_reconfig > 0) {
+			struct rte_eth_conf dev_conf;
+			int k;
+
 			port->need_reconfig = 0;
 
 			if (flow_isolate_all) {
@@ -2619,6 +2622,36 @@ start_port(portid_t pid)
 				port->need_reconfig = 1;
 				return -1;
 			}
+			/* get device configuration*/
+			if (0 !=
+				eth_dev_conf_get_print_err(pi, &dev_conf)) {
+				fprintf(stderr,
+					"port %d can not get device configuration\n",
+					pi);
+				return -1;
+			}
+			/* Apply Rx offloads configuration */
+			if (dev_conf.rxmode.offloads !=
+			    port->dev_conf.rxmode.offloads) {
+				port->dev_conf.rxmode.offloads |=
+					dev_conf.rxmode.offloads;
+				for (k = 0;
+				     k < port->dev_info.max_rx_queues;
+				     k++)
+					port->rx_conf[k].offloads |=
+						dev_conf.rxmode.offloads;
+			}
+			/* Apply Tx offloads configuration */
+			if (dev_conf.txmode.offloads !=
+			    port->dev_conf.txmode.offloads) {
+				port->dev_conf.txmode.offloads |=
+					dev_conf.txmode.offloads;
+				for (k = 0;
+				     k < port->dev_info.max_tx_queues;
+				     k++)
+					port->tx_conf[k].offloads |=
+						dev_conf.txmode.offloads;
+			}
 		}
 		if (port->need_reconfig_queues > 0 && is_proc_primary()) {
 			port->need_reconfig_queues = 0;
@@ -3581,7 +3614,7 @@ init_port_config(void)
 {
 	portid_t pid;
 	struct rte_port *port;
-	int ret;
+	int ret, i;
 
 	RTE_ETH_FOREACH_DEV(pid) {
 		port = &ports[pid];
@@ -3601,12 +3634,21 @@ init_port_config(void)
 		}
 
 		if (port->dcb_flag == 0) {
-			if( port->dev_conf.rx_adv_conf.rss_conf.rss_hf != 0)
+			if (port->dev_conf.rx_adv_conf.rss_conf.rss_hf != 0) {
 				port->dev_conf.rxmode.mq_mode =
 					(enum rte_eth_rx_mq_mode)
 						(rx_mq_mode & ETH_MQ_RX_RSS);
-			else
+			} else {
 				port->dev_conf.rxmode.mq_mode = ETH_MQ_RX_NONE;
+				port->dev_conf.rxmode.offloads &=
+						~DEV_RX_OFFLOAD_RSS_HASH;
+
+				for (i = 0;
+				     i < port->dev_info.nb_rx_queues;
+				     i++)
+					port->rx_conf[i].offloads &=
+						~DEV_RX_OFFLOAD_RSS_HASH;
+			}
 		}
 
 		rxtx_port_config(port);
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
index e9d9db06ce..33d931eb85 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -960,6 +960,8 @@ 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);
+int eth_dev_conf_get_print_err(uint16_t port_id,
+			struct rte_eth_conf *dev_conf);
 void eth_set_promisc_mode(uint16_t port_id, int enable);
 void eth_set_allmulticast_mode(uint16_t port, int enable);
 int eth_link_get_nowait_print_err(uint16_t port_id, struct rte_eth_link *link);
diff --git a/app/test-pmd/util.c b/app/test-pmd/util.c
index 51506e4940..1256eb6e66 100644
--- a/app/test-pmd/util.c
+++ b/app/test-pmd/util.c
@@ -444,6 +444,20 @@ eth_dev_info_get_print_err(uint16_t port_id,
 	return ret;
 }
 
+int
+eth_dev_conf_get_print_err(uint16_t port_id, struct rte_eth_conf *dev_conf)
+{
+	int ret;
+
+	ret = rte_eth_dev_conf_get(port_id, dev_conf);
+	if (ret != 0)
+		fprintf(stderr,
+			"Error during getting device configuration (port %u): %s\n",
+			port_id, strerror(-ret));
+
+	return ret;
+}
+
 void
 eth_set_promisc_mode(uint16_t port, int enable)
 {
-- 
2.25.1


  parent reply	other threads:[~2021-10-14 10:32 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-09 15:57 [dpdk-dev] [PATCH] app/testpmd: fix testpmd doesn't show RSS hash offload Jie Wang
2021-07-09  9:27 ` Andrew Rybchenko
2021-07-12  3:12   ` Li, Xiaoyun
     [not found]     ` <DM8PR11MB5639B19DACFB1B4F4E70ACA4D1149@DM8PR11MB5639.namprd11.prod.outlook.com>
2021-07-13  3:30       ` Li, Xiaoyun
2021-07-16  9:09     ` [dpdk-dev] [dpdk-stable] " Ferruh Yigit
2021-07-13 17:04 ` [dpdk-dev] [PATCH v2] " Jie Wang
2021-07-15  2:29   ` Li, Xiaoyun
2021-07-15  2:40     ` Li, Xiaoyun
2021-07-15 11:33   ` [dpdk-dev] [PATCH v3] " Jie Wang
2021-07-15 11:57     ` [dpdk-dev] [PATCH v4] " Jie Wang
2021-07-15  4:53       ` Li, Xiaoyun
2021-07-16  8:30         ` Li, Xiaoyun
2021-07-16  8:52           ` [dpdk-dev] [dpdk-stable] " Ferruh Yigit
     [not found]             ` <DM8PR11MB5639C757A790F65CBFB647C2D1E19@DM8PR11MB5639.namprd11.prod.outlook.com>
2021-07-19 16:18               ` Ferruh Yigit
2021-07-22 11:03                 ` Andrew Rybchenko
2021-08-09  8:53                   ` Ferruh Yigit
2021-08-17 17:38       ` [dpdk-dev] [PATCH v5] " Jie Wang
2021-08-24 17:10         ` [dpdk-dev] [PATCH v6 0/2] testpmd shows incorrect rx_offload configuration Jie Wang
2021-08-24 17:10           ` [dpdk-dev] [PATCH v6 1/2] ethdev: add an API to get device configuration info Jie Wang
2021-08-24 17:10           ` [dpdk-dev] [PATCH v6 2/2] app/testpmd: fix testpmd doesn't show RSS hash offload Jie Wang
2021-08-26  7:09           ` [dpdk-dev] [PATCH v7 0/2] testpmd shows incorrect rx_offload configuration Jie Wang
2021-08-26  7:09             ` [dpdk-dev] [PATCH v7 1/2] ethdev: add an API to get device configuration info Jie Wang
2021-08-26  7:09             ` [dpdk-dev] [PATCH v7 2/2] app/testpmd: fix testpmd doesn't show RSS hash offload Jie Wang
2021-08-27  7:36               ` Li, Xiaoyun
2021-08-27  8:17             ` [dpdk-dev] [PATCH v8 0/2] testpmd shows incorrect rx_offload configuration Jie Wang
2021-08-27  8:17               ` [dpdk-dev] [PATCH v8 1/2] ethdev: add an API to get device configuration info Jie Wang
2021-09-08 16:46                 ` Ferruh Yigit
2021-08-27  8:17               ` [dpdk-dev] [PATCH v8 2/2] app/testpmd: fix testpmd doesn't show RSS hash offload Jie Wang
2021-08-30  5:57                 ` Li, Xiaoyun
2021-09-08 16:50                 ` Ferruh Yigit
2021-09-09  3:31                   ` Li, Xiaoyun
2021-09-17 10:20                     ` Ferruh Yigit
2021-09-18  2:18                       ` Li, Xiaoyun
2021-09-20  9:45                         ` Ferruh Yigit
2021-09-20  9:48                 ` Ferruh Yigit
2021-09-22  2:52                   ` Wang, Jie1X
2021-09-26  9:20               ` [dpdk-dev] [PATCH v9 0/3] testpmd shows incorrect rx_offload configuration Jie Wang
2021-09-26  9:20                 ` [dpdk-dev] [PATCH v9 1/3] ethdev: add an API to get device configuration info Jie Wang
2021-09-27  6:19                   ` Thomas Monjalon
2021-09-27  7:21                     ` Wang, Jie1X
2021-09-27  7:56                       ` Thomas Monjalon
2021-10-04 11:20                         ` Ferruh Yigit
2021-10-04 11:25                           ` Thomas Monjalon
2021-10-04 11:22                   ` Ferruh Yigit
2021-10-04 11:26                     ` Thomas Monjalon
2021-10-04 11:35                       ` Ferruh Yigit
2021-09-26  9:20                 ` [dpdk-dev] [PATCH v9 2/3] doc: update release notes for new API Jie Wang
2021-10-04 11:22                   ` Ferruh Yigit
2021-10-04 11:26                     ` Thomas Monjalon
2021-09-26  9:20                 ` [dpdk-dev] [PATCH v9 3/3] app/testpmd: fix testpmd doesn't show RSS hash offload Jie Wang
2021-10-08  3:41                 ` [dpdk-dev] [PATCH v10 0/2] testpmd shows incorrect rx_offload configuration Jie Wang
2021-10-08  3:41                   ` [dpdk-dev] [PATCH v10 1/2] ethdev: add an API to get device configuration info Jie Wang
2021-10-08 12:10                     ` Ferruh Yigit
2021-10-08  3:41                   ` [dpdk-dev] [PATCH v10 2/2] app/testpmd: fix testpmd doesn't show RSS hash offload Jie Wang
2021-10-08 12:12                     ` Ferruh Yigit
2021-10-11 18:01                   ` [dpdk-dev] [PATCH v11 0/2] testpmd shows incorrect rx_offload configuration Jie Wang
2021-10-11 18:01                     ` [dpdk-dev] [PATCH v11 1/2] ethdev: add an API to get device configuration Jie Wang
2021-10-11 10:08                       ` Somnath Kotur
2021-10-11 12:21                       ` Andrew Rybchenko
2021-10-11 18:01                     ` [dpdk-dev] [PATCH v11 2/2] app/testpmd: fix testpmd doesn't show RSS hash offload Jie Wang
2021-10-12  2:54                     ` [dpdk-dev] [PATCH v12 0/2] testpmd shows incorrect rx_offload configuration Jie Wang
2021-10-12  2:54                       ` [dpdk-dev] [PATCH v12 1/2] ethdev: add an API to get device configuration Jie Wang
2021-10-12  5:50                         ` Andrew Rybchenko
2021-10-12  2:54                       ` [dpdk-dev] [PATCH v12 2/2] app/testpmd: fix testpmd doesn't show RSS hash offload Jie Wang
2021-10-12 14:37                         ` Ferruh Yigit
2021-10-13  2:42                           ` Wang, Jie1X
2021-10-13  8:50                             ` Ferruh Yigit
2021-10-13 10:14                               ` Ferruh Yigit
2021-10-12 14:35                       ` [dpdk-dev] [PATCH v12 0/2] testpmd shows incorrect rx_offload configuration Ferruh Yigit
2021-10-14 10:31                       ` [dpdk-dev] [PATCH v13 " Jie Wang
2021-10-14 10:31                         ` [dpdk-dev] [PATCH v13 1/2] ethdev: add an API to get device configuration Jie Wang
2021-10-14 10:31                         ` Jie Wang [this message]
2021-10-14 12:56                         ` [dpdk-dev] [PATCH v13 0/2] testpmd shows incorrect rx_offload configuration Ferruh Yigit
2021-10-15 10:43                           ` Ferruh Yigit
2021-10-15 11:29                           ` Ferruh Yigit
2021-08-24 18:19         ` [dpdk-dev] [PATCH v6 " Jie Wang
2021-08-24 18:19           ` [dpdk-dev] [PATCH v6 1/2] ethdev: add an API to get device configuration info Jie Wang
2021-08-25 20:07             ` Ferruh Yigit
2021-08-26  6:00               ` Ajit Khaparde
2021-08-24 18:19           ` [dpdk-dev] [PATCH v6 2/2] app/testpmd: fix testpmd doesn't show RSS hash offload Jie Wang

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=20211014103124.528877-3-jie1x.wang@intel.com \
    --to=jie1x.wang@intel.com \
    --cc=andrew.rybchenko@oktetlabs.ru \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=stevex.yang@intel.com \
    --cc=thomas@monjalon.net \
    --cc=xiaoyun.li@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.