!508 [sync] PR-501: sync some bugfix from upstreaming about testpmd and doc

From: @openeuler-sync-bot 
Reviewed-by: @li-huisong 
Signed-off-by: @li-huisong
This commit is contained in:
openeuler-ci-bot 2023-12-09 08:28:39 +00:00 committed by Gitee
commit 258e6d9baf
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
14 changed files with 1348 additions and 1 deletions

View File

@ -0,0 +1,49 @@
From f799040a5fe871e9e11101e66ccbdecea8d84b56 Mon Sep 17 00:00:00 2001
From: Huisong Li <lihuisong@huawei.com>
Date: Tue, 7 Nov 2023 12:11:16 +0800
Subject: [PATCH 398/410] app/testpmd: remove useless check in TSO command
[ upstream commit 773397f6f4b5e325e786835343bacbc454d1e5f0 ]
Testpmd has added the check of TSO offload capability of port, please see
the commit 3926dd2b6668 ("app/testpmd: enforce offload capabilities check")
So the code following the check code memtioned above to display warning
when port doesn't support TSO offload doesn't access to forever.
Fixes: 3926dd2b6668 ("app/testpmd: enforce offload capabilities check")
Cc: stable@dpdk.org
Signed-off-by: Huisong Li <lihuisong@huawei.com>
Acked-by: Ferruh Yigit <ferruh.yigit@amd.com>
---
app/test-pmd/cmdline.c | 13 -------------
1 file changed, 13 deletions(-)
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index cdf943162b..88fd296bbc 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -4961,19 +4961,6 @@ cmd_tso_set_parsed(void *parsed_result,
ports[res->port_id].tso_segsz);
}
cmd_config_queue_tx_offloads(&ports[res->port_id]);
-
- /* display warnings if configuration is not supported by the NIC */
- 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 & RTE_ETH_TX_OFFLOAD_TCP_TSO) == 0) {
- fprintf(stderr,
- "Warning: TSO enabled but not supported by port %d\n",
- res->port_id);
- }
-
cmd_reconfig_device_queue(res->port_id, 1, 1);
}
--
2.33.0

View File

@ -0,0 +1,95 @@
From 0ff1a5865fb7e5f11f174cb0cf10eff3a0a90f25 Mon Sep 17 00:00:00 2001
From: Huisong Li <lihuisong@huawei.com>
Date: Sat, 11 Nov 2023 12:59:41 +0800
Subject: [PATCH 399/410] app/testpmd: fix tunnel TSO capability check
[ upstream commit 6d4def820aa7d118f1ebdebf7af8ba6299ac20ee ]
Currently, testpmd set tunnel TSO offload even if fail to get dev_info.
In this case, the 'tx_offload_capa' in dev_info is a random value,
Fixes: 6f51deb903b2 ("app/testpmd: check status of getting ethdev info")
Cc: stable@dpdk.org
Signed-off-by: Huisong Li <lihuisong@huawei.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@amd.com>
---
app/test-pmd/cmdline.c | 29 ++++++++++++++---------------
1 file changed, 14 insertions(+), 15 deletions(-)
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 88fd296bbc..9164f02932 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -5018,39 +5018,33 @@ struct cmd_tunnel_tso_set_result {
portid_t port_id;
};
-static struct rte_eth_dev_info
-check_tunnel_tso_nic_support(portid_t port_id)
+static void
+check_tunnel_tso_nic_support(portid_t port_id, uint64_t tx_offload_capa)
{
- struct rte_eth_dev_info dev_info;
-
- if (eth_dev_info_get_print_err(port_id, &dev_info) != 0)
- return dev_info;
-
- if (!(dev_info.tx_offload_capa & RTE_ETH_TX_OFFLOAD_VXLAN_TNL_TSO))
+ if (!(tx_offload_capa & RTE_ETH_TX_OFFLOAD_VXLAN_TNL_TSO))
fprintf(stderr,
"Warning: VXLAN TUNNEL TSO not supported therefore not enabled for port %d\n",
port_id);
- if (!(dev_info.tx_offload_capa & RTE_ETH_TX_OFFLOAD_GRE_TNL_TSO))
+ if (!(tx_offload_capa & RTE_ETH_TX_OFFLOAD_GRE_TNL_TSO))
fprintf(stderr,
"Warning: GRE TUNNEL TSO not supported therefore not enabled for port %d\n",
port_id);
- if (!(dev_info.tx_offload_capa & RTE_ETH_TX_OFFLOAD_IPIP_TNL_TSO))
+ if (!(tx_offload_capa & RTE_ETH_TX_OFFLOAD_IPIP_TNL_TSO))
fprintf(stderr,
"Warning: IPIP TUNNEL TSO not supported therefore not enabled for port %d\n",
port_id);
- if (!(dev_info.tx_offload_capa & RTE_ETH_TX_OFFLOAD_GENEVE_TNL_TSO))
+ if (!(tx_offload_capa & RTE_ETH_TX_OFFLOAD_GENEVE_TNL_TSO))
fprintf(stderr,
"Warning: GENEVE TUNNEL TSO not supported therefore not enabled for port %d\n",
port_id);
- if (!(dev_info.tx_offload_capa & RTE_ETH_TX_OFFLOAD_IP_TNL_TSO))
+ if (!(tx_offload_capa & RTE_ETH_TX_OFFLOAD_IP_TNL_TSO))
fprintf(stderr,
"Warning: IP TUNNEL TSO not supported therefore not enabled for port %d\n",
port_id);
- if (!(dev_info.tx_offload_capa & RTE_ETH_TX_OFFLOAD_UDP_TNL_TSO))
+ if (!(tx_offload_capa & RTE_ETH_TX_OFFLOAD_UDP_TNL_TSO))
fprintf(stderr,
"Warning: UDP TUNNEL TSO not supported therefore not enabled for port %d\n",
port_id);
- return dev_info;
}
static void
@@ -5060,6 +5054,7 @@ cmd_tunnel_tso_set_parsed(void *parsed_result,
{
struct cmd_tunnel_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;
@@ -5071,7 +5066,11 @@ cmd_tunnel_tso_set_parsed(void *parsed_result,
if (!strcmp(res->mode, "set"))
ports[res->port_id].tunnel_tso_segsz = res->tso_segsz;
- dev_info = check_tunnel_tso_nic_support(res->port_id);
+ ret = eth_dev_info_get_print_err(res->port_id, &dev_info);
+ if (ret != 0)
+ return;
+
+ check_tunnel_tso_nic_support(res->port_id, dev_info.tx_offload_capa);
if (ports[res->port_id].tunnel_tso_segsz == 0) {
ports[res->port_id].dev_conf.txmode.offloads &=
~(RTE_ETH_TX_OFFLOAD_VXLAN_TNL_TSO |
--
2.33.0

View File

@ -0,0 +1,120 @@
From 1e6660cb97216a23e8f8f463ae66e83f2c6414ff Mon Sep 17 00:00:00 2001
From: Huisong Li <lihuisong@huawei.com>
Date: Sat, 11 Nov 2023 12:59:42 +0800
Subject: [PATCH 400/410] app/testpmd: add explicit check for tunnel TSO
[ upstream commit 33156a6bc61560e74a126ade38a7af9c1fa02671 ]
If port don't support TSO of tunnel packets, tell user in advance and no
need to change other configuration of this port in case of fault spread.
In addition, if some tunnel offloads don't support, which is not an
error case, the log about this shouldn't be to stderr.
Fixes: 3926dd2b6668 ("app/testpmd: enforce offload capabilities check")
Cc: stable@dpdk.org
Signed-off-by: Huisong Li <lihuisong@huawei.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@amd.com>
---
app/test-pmd/cmdline.c | 55 ++++++++++++++++++------------------------
1 file changed, 24 insertions(+), 31 deletions(-)
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 9164f02932..444c7a79ff 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -5022,28 +5022,22 @@ static void
check_tunnel_tso_nic_support(portid_t port_id, uint64_t tx_offload_capa)
{
if (!(tx_offload_capa & RTE_ETH_TX_OFFLOAD_VXLAN_TNL_TSO))
- fprintf(stderr,
- "Warning: VXLAN TUNNEL TSO not supported therefore not enabled for port %d\n",
+ printf("Warning: VXLAN TUNNEL TSO not supported therefore not enabled for port %d\n",
port_id);
if (!(tx_offload_capa & RTE_ETH_TX_OFFLOAD_GRE_TNL_TSO))
- fprintf(stderr,
- "Warning: GRE TUNNEL TSO not supported therefore not enabled for port %d\n",
+ printf("Warning: GRE TUNNEL TSO not supported therefore not enabled for port %d\n",
port_id);
if (!(tx_offload_capa & RTE_ETH_TX_OFFLOAD_IPIP_TNL_TSO))
- fprintf(stderr,
- "Warning: IPIP TUNNEL TSO not supported therefore not enabled for port %d\n",
+ printf("Warning: IPIP TUNNEL TSO not supported therefore not enabled for port %d\n",
port_id);
if (!(tx_offload_capa & RTE_ETH_TX_OFFLOAD_GENEVE_TNL_TSO))
- fprintf(stderr,
- "Warning: GENEVE TUNNEL TSO not supported therefore not enabled for port %d\n",
+ printf("Warning: GENEVE TUNNEL TSO not supported therefore not enabled for port %d\n",
port_id);
if (!(tx_offload_capa & RTE_ETH_TX_OFFLOAD_IP_TNL_TSO))
- fprintf(stderr,
- "Warning: IP TUNNEL TSO not supported therefore not enabled for port %d\n",
+ printf("Warning: IP TUNNEL TSO not supported therefore not enabled for port %d\n",
port_id);
if (!(tx_offload_capa & RTE_ETH_TX_OFFLOAD_UDP_TNL_TSO))
- fprintf(stderr,
- "Warning: UDP TUNNEL TSO not supported therefore not enabled for port %d\n",
+ printf("Warning: UDP TUNNEL TSO not supported therefore not enabled for port %d\n",
port_id);
}
@@ -5054,6 +5048,12 @@ cmd_tunnel_tso_set_parsed(void *parsed_result,
{
struct cmd_tunnel_tso_set_result *res = parsed_result;
struct rte_eth_dev_info dev_info;
+ uint64_t all_tunnel_tso = RTE_ETH_TX_OFFLOAD_VXLAN_TNL_TSO |
+ RTE_ETH_TX_OFFLOAD_GRE_TNL_TSO |
+ RTE_ETH_TX_OFFLOAD_IPIP_TNL_TSO |
+ RTE_ETH_TX_OFFLOAD_GENEVE_TNL_TSO |
+ RTE_ETH_TX_OFFLOAD_IP_TNL_TSO |
+ RTE_ETH_TX_OFFLOAD_UDP_TNL_TSO;
int ret;
if (port_id_is_invalid(res->port_id, ENABLED_WARN))
@@ -5066,30 +5066,23 @@ cmd_tunnel_tso_set_parsed(void *parsed_result,
if (!strcmp(res->mode, "set"))
ports[res->port_id].tunnel_tso_segsz = res->tso_segsz;
- ret = eth_dev_info_get_print_err(res->port_id, &dev_info);
- if (ret != 0)
- return;
-
- check_tunnel_tso_nic_support(res->port_id, dev_info.tx_offload_capa);
if (ports[res->port_id].tunnel_tso_segsz == 0) {
- ports[res->port_id].dev_conf.txmode.offloads &=
- ~(RTE_ETH_TX_OFFLOAD_VXLAN_TNL_TSO |
- RTE_ETH_TX_OFFLOAD_GRE_TNL_TSO |
- RTE_ETH_TX_OFFLOAD_IPIP_TNL_TSO |
- RTE_ETH_TX_OFFLOAD_GENEVE_TNL_TSO |
- RTE_ETH_TX_OFFLOAD_IP_TNL_TSO |
- RTE_ETH_TX_OFFLOAD_UDP_TNL_TSO);
+ ports[res->port_id].dev_conf.txmode.offloads &= ~all_tunnel_tso;
printf("TSO for tunneled packets is disabled\n");
} else {
- uint64_t tso_offloads = (RTE_ETH_TX_OFFLOAD_VXLAN_TNL_TSO |
- RTE_ETH_TX_OFFLOAD_GRE_TNL_TSO |
- RTE_ETH_TX_OFFLOAD_IPIP_TNL_TSO |
- RTE_ETH_TX_OFFLOAD_GENEVE_TNL_TSO |
- RTE_ETH_TX_OFFLOAD_IP_TNL_TSO |
- RTE_ETH_TX_OFFLOAD_UDP_TNL_TSO);
+ ret = eth_dev_info_get_print_err(res->port_id, &dev_info);
+ if (ret != 0)
+ return;
+
+ if ((all_tunnel_tso & dev_info.tx_offload_capa) == 0) {
+ fprintf(stderr, "Error: port=%u don't support tunnel TSO offloads.\n",
+ res->port_id);
+ return;
+ }
+ check_tunnel_tso_nic_support(res->port_id, dev_info.tx_offload_capa);
ports[res->port_id].dev_conf.txmode.offloads |=
- (tso_offloads & dev_info.tx_offload_capa);
+ (all_tunnel_tso & dev_info.tx_offload_capa);
printf("TSO segment size for tunneled packets is %d\n",
ports[res->port_id].tunnel_tso_segsz);
--
2.33.0

View File

@ -0,0 +1,71 @@
From 27c78af1f290c342b6fb64c2f57a430628f5062f Mon Sep 17 00:00:00 2001
From: Huisong Li <lihuisong@huawei.com>
Date: Sat, 11 Nov 2023 12:59:43 +0800
Subject: [PATCH 401/410] app/testpmd: fix tunnel TSO configuration
[ upstream commit e43dc93803c4623840472c6109ef05e26286ec2f ]
Currently, there are two conditions to set tunnel TSO, like "parse
tunnel" and "outer IP checksum".
If these conditions are not satisfied, testpmd should not change their
configuration, like tx_offloads on port and per queue, and no need to
request "reconfig device".
Fixes: 597f9fafe13b ("app/testpmd: convert to new Tx offloads API")
Cc: stable@dpdk.org
Signed-off-by: Huisong Li <lihuisong@huawei.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@amd.com>
---
app/test-pmd/cmdline.c | 25 ++++++++++++++-----------
1 file changed, 14 insertions(+), 11 deletions(-)
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 444c7a79ff..fd897dc80c 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -5079,12 +5079,6 @@ cmd_tunnel_tso_set_parsed(void *parsed_result,
res->port_id);
return;
}
- check_tunnel_tso_nic_support(res->port_id, dev_info.tx_offload_capa);
-
- ports[res->port_id].dev_conf.txmode.offloads |=
- (all_tunnel_tso & dev_info.tx_offload_capa);
- printf("TSO segment size for tunneled packets is %d\n",
- ports[res->port_id].tunnel_tso_segsz);
/* Below conditions are needed to make it work:
* (1) tunnel TSO is supported by the NIC;
@@ -5097,14 +5091,23 @@ cmd_tunnel_tso_set_parsed(void *parsed_result,
* is not necessary for IPv6 tunneled pkts because there's no
* checksum in IP header anymore.
*/
-
- if (!ports[res->port_id].parse_tunnel)
+ if (!ports[res->port_id].parse_tunnel) {
fprintf(stderr,
- "Warning: csum parse_tunnel must be set so that tunneled packets are recognized\n");
+ "Error: csum parse_tunnel must be set so that tunneled packets are recognized\n");
+ return;
+ }
if (!(ports[res->port_id].dev_conf.txmode.offloads &
- RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM))
+ RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM)) {
fprintf(stderr,
- "Warning: csum set outer-ip must be set to hw if outer L3 is IPv4; not necessary for IPv6\n");
+ "Error: csum set outer-ip must be set to hw if outer L3 is IPv4; not necessary for IPv6\n");
+ return;
+ }
+
+ check_tunnel_tso_nic_support(res->port_id, dev_info.tx_offload_capa);
+ ports[res->port_id].dev_conf.txmode.offloads |=
+ (all_tunnel_tso & dev_info.tx_offload_capa);
+ printf("TSO segment size for tunneled packets is %d\n",
+ ports[res->port_id].tunnel_tso_segsz);
}
cmd_config_queue_tx_offloads(&ports[res->port_id]);
--
2.33.0

View File

@ -0,0 +1,359 @@
From 7830c0aee5eff3f97a39b2a49ead39ffa315182f Mon Sep 17 00:00:00 2001
From: Dengdui Huang <huangdengdui@huawei.com>
Date: Fri, 10 Nov 2023 17:10:13 +0800
Subject: [PATCH 402/410] app/testpmd: allow offload config for all ports
[ upstream commit 6280fe565b44aad684cab320939acdd52ec1a9ec ]
Support config Rx/Tx offload for all ports in following commands:
1. port config all rx_offload (offloading) (on|off)
2. port config all tx_offload (offloading) (on|off)
Signed-off-by: Dengdui Huang <huangdengdui@huawei.com>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@amd.com>
Acked-by: Huisong Li <lihuisong@huawei.com>
---
app/test-pmd/cmdline.c | 205 ++++++++++++++++++--
doc/guides/testpmd_app_ug/testpmd_funcs.rst | 8 +-
2 files changed, 189 insertions(+), 24 deletions(-)
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index fd897dc80c..f380d35eec 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -867,7 +867,7 @@ static void cmd_help_long_parsed(void *parsed_result,
"port config (port_id) udp_tunnel_port add|rm vxlan|geneve|ecpri (udp_port)\n\n"
" Add/remove UDP tunnel port for tunneling offload\n\n"
- "port config <port_id> rx_offload all|vlan_strip|"
+ "port config (port_id|all) rx_offload all|vlan_strip|"
"ipv4_cksum|udp_cksum|tcp_cksum|tcp_lro|qinq_strip|"
"outer_ipv4_cksum|macsec_strip|header_split|"
"vlan_filter|vlan_extend|scatter|"
@@ -883,7 +883,7 @@ static void cmd_help_long_parsed(void *parsed_result,
" Enable or disable a per queue Rx offloading"
" only on a specific Rx queue\n\n"
- "port config (port_id) tx_offload all|vlan_insert|"
+ "port config (port_id|all) tx_offload all|vlan_insert|"
"ipv4_cksum|udp_cksum|tcp_cksum|sctp_cksum|tcp_tso|"
"udp_tso|outer_ipv4_cksum|qinq_insert|vxlan_tnl_tso|"
"gre_tnl_tso|ipip_tnl_tso|geneve_tnl_tso|"
@@ -16210,12 +16210,8 @@ search_rx_offload(const char *name)
}
static void
-cmd_config_per_port_rx_offload_parsed(void *parsed_result,
- __rte_unused struct cmdline *cl,
- __rte_unused void *data)
+config_port_rx_offload(portid_t port_id, char *name, bool on)
{
- struct cmd_config_per_port_rx_offload_result *res = parsed_result;
- portid_t port_id = res->port_id;
struct rte_eth_dev_info dev_info;
struct rte_port *port = &ports[port_id];
uint16_t nb_rx_queues;
@@ -16234,18 +16230,18 @@ cmd_config_per_port_rx_offload_parsed(void *parsed_result,
if (ret != 0)
return;
- if (!strcmp(res->offload, "all")) {
+ if (!strcmp(name, "all")) {
offload = dev_info.rx_offload_capa;
} else {
- offload = search_rx_offload(res->offload);
+ offload = search_rx_offload(name);
if (offload == 0) {
- fprintf(stderr, "Unknown offload name: %s\n", res->offload);
+ fprintf(stderr, "Unknown offload name: %s\n", name);
return;
}
}
nb_rx_queues = dev_info.nb_rx_queues;
- if (!strcmp(res->on_off, "on")) {
+ if (on) {
port->dev_conf.rxmode.offloads |= offload;
for (q = 0; q < nb_rx_queues; q++)
port->rx_conf[q].offloads |= offload;
@@ -16258,6 +16254,18 @@ cmd_config_per_port_rx_offload_parsed(void *parsed_result,
cmd_reconfig_device_queue(port_id, 1, 1);
}
+static void
+cmd_config_per_port_rx_offload_parsed(void *parsed_result,
+ __rte_unused struct cmdline *cl,
+ __rte_unused void *data)
+{
+ struct cmd_config_per_port_rx_offload_result *res = parsed_result;
+ bool on;
+
+ on = strcmp(res->on_off, "on") == 0;
+ config_port_rx_offload(res->port_id, res->offload, on);
+}
+
cmdline_parse_inst_t cmd_config_per_port_rx_offload = {
.f = cmd_config_per_port_rx_offload_parsed,
.data = NULL,
@@ -16277,6 +16285,79 @@ cmdline_parse_inst_t cmd_config_per_port_rx_offload = {
}
};
+/* Enable/Disable all port Rx offloading */
+struct cmd_config_all_port_rx_offload_result {
+ cmdline_fixed_string_t port;
+ cmdline_fixed_string_t config;
+ cmdline_fixed_string_t port_all;
+ cmdline_fixed_string_t rx_offload;
+ cmdline_fixed_string_t offload;
+ cmdline_fixed_string_t on_off;
+};
+
+static cmdline_parse_token_string_t cmd_config_all_port_rx_offload_result_port =
+ TOKEN_STRING_INITIALIZER
+ (struct cmd_config_all_port_rx_offload_result,
+ port, "port");
+static cmdline_parse_token_string_t cmd_config_all_port_rx_offload_result_config =
+ TOKEN_STRING_INITIALIZER
+ (struct cmd_config_all_port_rx_offload_result,
+ config, "config");
+
+static cmdline_parse_token_string_t cmd_config_all_port_rx_offload_result_port_all =
+ TOKEN_STRING_INITIALIZER(struct cmd_config_all_port_rx_offload_result,
+ port_all, "all");
+static cmdline_parse_token_string_t cmd_config_all_port_rx_offload_result_rx_offload =
+ TOKEN_STRING_INITIALIZER
+ (struct cmd_config_all_port_rx_offload_result,
+ rx_offload, "rx_offload");
+static cmdline_parse_token_string_t cmd_config_all_port_rx_offload_result_offload =
+ TOKEN_STRING_INITIALIZER
+ (struct cmd_config_all_port_rx_offload_result,
+ offload, "all#vlan_strip#ipv4_cksum#udp_cksum#tcp_cksum#tcp_lro#"
+ "qinq_strip#outer_ipv4_cksum#macsec_strip#"
+ "vlan_filter#vlan_extend#"
+ "scatter#buffer_split#timestamp#security#"
+ "keep_crc#rss_hash");
+static cmdline_parse_token_string_t cmd_config_all_port_rx_offload_result_on_off =
+ TOKEN_STRING_INITIALIZER
+ (struct cmd_config_all_port_rx_offload_result,
+ on_off, "on#off");
+
+static void
+cmd_config_all_port_rx_offload_parsed(void *parsed_result,
+ __rte_unused struct cmdline *cl,
+ __rte_unused void *data)
+{
+ struct cmd_config_all_port_rx_offload_result *res = parsed_result;
+ bool on_off;
+ portid_t i;
+
+ on_off = strcmp(res->on_off, "on") == 0;
+ RTE_ETH_FOREACH_DEV(i)
+ config_port_rx_offload(i, res->offload, on_off);
+
+}
+
+static cmdline_parse_inst_t cmd_config_all_port_rx_offload = {
+ .f = cmd_config_all_port_rx_offload_parsed,
+ .data = NULL,
+ .help_str = "port config all rx_offload all|vlan_strip|ipv4_cksum|"
+ "udp_cksum|tcp_cksum|tcp_lro|qinq_strip|outer_ipv4_cksum|"
+ "macsec_strip|vlan_filter|vlan_extend|"
+ "scatter|buffer_split|timestamp|security|"
+ "keep_crc|rss_hash on|off",
+ .tokens = {
+ (void *)&cmd_config_all_port_rx_offload_result_port,
+ (void *)&cmd_config_all_port_rx_offload_result_config,
+ (void *)&cmd_config_all_port_rx_offload_result_port_all,
+ (void *)&cmd_config_all_port_rx_offload_result_rx_offload,
+ (void *)&cmd_config_all_port_rx_offload_result_offload,
+ (void *)&cmd_config_all_port_rx_offload_result_on_off,
+ NULL,
+ }
+};
+
/* Enable/Disable a per queue offloading */
struct cmd_config_per_queue_rx_offload_result {
cmdline_fixed_string_t port;
@@ -16641,12 +16722,8 @@ search_tx_offload(const char *name)
}
static void
-cmd_config_per_port_tx_offload_parsed(void *parsed_result,
- __rte_unused struct cmdline *cl,
- __rte_unused void *data)
+config_port_tx_offload(portid_t port_id, char *name, bool on)
{
- struct cmd_config_per_port_tx_offload_result *res = parsed_result;
- portid_t port_id = res->port_id;
struct rte_eth_dev_info dev_info;
struct rte_port *port = &ports[port_id];
uint16_t nb_tx_queues;
@@ -16665,18 +16742,18 @@ cmd_config_per_port_tx_offload_parsed(void *parsed_result,
if (ret != 0)
return;
- if (!strcmp(res->offload, "all")) {
+ if (!strcmp(name, "all")) {
offload = dev_info.tx_offload_capa;
} else {
- offload = search_tx_offload(res->offload);
+ offload = search_tx_offload(name);
if (offload == 0) {
- fprintf(stderr, "Unknown offload name: %s\n", res->offload);
+ fprintf(stderr, "Unknown offload name: %s\n", name);
return;
}
}
nb_tx_queues = dev_info.nb_tx_queues;
- if (!strcmp(res->on_off, "on")) {
+ if (on) {
port->dev_conf.txmode.offloads |= offload;
for (q = 0; q < nb_tx_queues; q++)
port->tx_conf[q].offloads |= offload;
@@ -16689,6 +16766,18 @@ cmd_config_per_port_tx_offload_parsed(void *parsed_result,
cmd_reconfig_device_queue(port_id, 1, 1);
}
+static void
+cmd_config_per_port_tx_offload_parsed(void *parsed_result,
+ __rte_unused struct cmdline *cl,
+ __rte_unused void *data)
+{
+ struct cmd_config_per_port_tx_offload_result *res = parsed_result;
+ bool on;
+
+ on = strcmp(res->on_off, "on");
+ config_port_tx_offload(res->port_id, res->offload, on);
+}
+
cmdline_parse_inst_t cmd_config_per_port_tx_offload = {
.f = cmd_config_per_port_tx_offload_parsed,
.data = NULL,
@@ -16710,6 +16799,80 @@ cmdline_parse_inst_t cmd_config_per_port_tx_offload = {
}
};
+/* Enable/Disable all port Tx offloading */
+struct cmd_config_all_port_tx_offload_result {
+ cmdline_fixed_string_t port;
+ cmdline_fixed_string_t config;
+ cmdline_fixed_string_t port_all;
+ cmdline_fixed_string_t tx_offload;
+ cmdline_fixed_string_t offload;
+ cmdline_fixed_string_t on_off;
+};
+
+static cmdline_parse_token_string_t cmd_config_all_port_tx_offload_result_port =
+ TOKEN_STRING_INITIALIZER
+ (struct cmd_config_all_port_tx_offload_result,
+ port, "port");
+static cmdline_parse_token_string_t cmd_config_all_port_tx_offload_result_config =
+ TOKEN_STRING_INITIALIZER
+ (struct cmd_config_all_port_tx_offload_result,
+ config, "config");
+static cmdline_parse_token_string_t cmd_config_all_port_tx_offload_result_port_all =
+ TOKEN_STRING_INITIALIZER(struct cmd_config_all_port_tx_offload_result,
+ port_all, "all");
+static cmdline_parse_token_string_t cmd_config_all_port_tx_offload_result_tx_offload =
+ TOKEN_STRING_INITIALIZER
+ (struct cmd_config_all_port_tx_offload_result,
+ tx_offload, "tx_offload");
+static cmdline_parse_token_string_t cmd_config_all_port_tx_offload_result_offload =
+ TOKEN_STRING_INITIALIZER
+ (struct cmd_config_all_port_tx_offload_result,
+ offload, "all#vlan_insert#ipv4_cksum#udp_cksum#tcp_cksum#"
+ "sctp_cksum#tcp_tso#udp_tso#outer_ipv4_cksum#"
+ "qinq_insert#vxlan_tnl_tso#gre_tnl_tso#"
+ "ipip_tnl_tso#geneve_tnl_tso#macsec_insert#"
+ "mt_lockfree#multi_segs#mbuf_fast_free#security#"
+ "send_on_timestamp");
+static cmdline_parse_token_string_t cmd_config_all_port_tx_offload_result_on_off =
+ TOKEN_STRING_INITIALIZER
+ (struct cmd_config_all_port_tx_offload_result,
+ on_off, "on#off");
+
+static void
+cmd_config_all_port_tx_offload_parsed(void *parsed_result,
+ __rte_unused struct cmdline *cl,
+ __rte_unused void *data)
+{
+ struct cmd_config_all_port_tx_offload_result *res = parsed_result;
+ portid_t i;
+ bool on_off;
+
+ on_off = strcmp(res->on_off, "on") == 0;
+ RTE_ETH_FOREACH_DEV(i)
+ config_port_tx_offload(i, res->offload, on_off);
+}
+
+static cmdline_parse_inst_t cmd_config_all_port_tx_offload = {
+ .f = cmd_config_all_port_tx_offload_parsed,
+ .data = NULL,
+ .help_str = "port config all tx_offload "
+ "all|vlan_insert|ipv4_cksum|udp_cksum|tcp_cksum|"
+ "sctp_cksum|tcp_tso|udp_tso|outer_ipv4_cksum|"
+ "qinq_insert|vxlan_tnl_tso|gre_tnl_tso|"
+ "ipip_tnl_tso|geneve_tnl_tso|macsec_insert|"
+ "mt_lockfree|multi_segs|mbuf_fast_free|security|"
+ "send_on_timestamp on|off",
+ .tokens = {
+ (void *)&cmd_config_all_port_tx_offload_result_port,
+ (void *)&cmd_config_all_port_tx_offload_result_config,
+ (void *)&cmd_config_all_port_tx_offload_result_port_all,
+ (void *)&cmd_config_all_port_tx_offload_result_tx_offload,
+ (void *)&cmd_config_all_port_tx_offload_result_offload,
+ (void *)&cmd_config_all_port_tx_offload_result_on_off,
+ NULL,
+ }
+};
+
/* Enable/Disable a per queue offloading */
struct cmd_config_per_queue_tx_offload_result {
cmdline_fixed_string_t port;
@@ -18021,10 +18184,12 @@ cmdline_parse_ctx_t main_ctx[] = {
(cmdline_parse_inst_t *)&cmd_rx_offload_get_capa,
(cmdline_parse_inst_t *)&cmd_rx_offload_get_configuration,
(cmdline_parse_inst_t *)&cmd_config_per_port_rx_offload,
+ (cmdline_parse_inst_t *)&cmd_config_all_port_rx_offload,
(cmdline_parse_inst_t *)&cmd_config_per_queue_rx_offload,
(cmdline_parse_inst_t *)&cmd_tx_offload_get_capa,
(cmdline_parse_inst_t *)&cmd_tx_offload_get_configuration,
(cmdline_parse_inst_t *)&cmd_config_per_port_tx_offload,
+ (cmdline_parse_inst_t *)&cmd_config_all_port_tx_offload,
(cmdline_parse_inst_t *)&cmd_config_per_queue_tx_offload,
#ifdef RTE_LIB_BPF
(cmdline_parse_inst_t *)&cmd_operate_bpf_ld_parse,
diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
index a81296d2ba..226569c545 100644
--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
@@ -1767,9 +1767,9 @@ Reset ptype mapping table::
config per port Rx offloading
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Enable or disable a per port Rx offloading on all Rx queues of a port::
+Enable or disable port Rx offloading on all Rx queues of a port::
- testpmd> port config (port_id) rx_offload (offloading) on|off
+ testpmd> port config (port_id|all) rx_offload (offloading) on|off
* ``offloading``: can be any of these offloading capability:
all, vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
@@ -1797,9 +1797,9 @@ This command should be run when the port is stopped, or else it will fail.
config per port Tx offloading
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Enable or disable a per port Tx offloading on all Tx queues of a port::
+Enable or disable port Tx offloading on all Tx queues of a port::
- testpmd> port config (port_id) tx_offload (offloading) on|off
+ testpmd> port config (port_id|all) tx_offload (offloading) on|off
* ``offloading``: can be any of these offloading capability:
all, vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
--
2.33.0

View File

@ -0,0 +1,37 @@
From ca98a6df1479ed5b04f1df45cd76b87f61f4be28 Mon Sep 17 00:00:00 2001
From: Ferruh Yigit <ferruh.yigit@amd.com>
Date: Thu, 16 Nov 2023 17:21:55 +0000
Subject: [PATCH 403/410] app/testpmd: fix Tx offload command
In command to set Tx offload:
"port config <port_id> tx_offload <offload> on|off",
there is a defect in "on|off" comparison, so command does opposite of
what is intended. Fixed comparison.
Bugzilla ID: 1326
Fixes: 6280fe565b44 ("app/testpmd: allow offload config for all ports")
Signed-off-by: Ferruh Yigit <ferruh.yigit@amd.com>
Reviewed-by: Chengwen Feng <fengchengwen@huawei.com>
Acked-by: Huisong Li <lihuisong@huawei.com>
---
app/test-pmd/cmdline.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index f380d35eec..b412452948 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -16774,7 +16774,7 @@ cmd_config_per_port_tx_offload_parsed(void *parsed_result,
struct cmd_config_per_port_tx_offload_result *res = parsed_result;
bool on;
- on = strcmp(res->on_off, "on");
+ on = strcmp(res->on_off, "on") == 0;
config_port_tx_offload(res->port_id, res->offload, on);
}
--
2.33.0

View File

@ -0,0 +1,72 @@
From 40bc40d4e92ca9aefaf4e7ea2e859e582ca4559e Mon Sep 17 00:00:00 2001
From: Huisong Li <lihuisong@huawei.com>
Date: Wed, 15 Nov 2023 18:33:23 +0800
Subject: [PATCH 404/410] app/testpmd: check port and queue Rx/Tx offloads
[ upstream commit f4b0f86a9a0cffc5c5611f4e685bab71c8b47b12 ]
This patch adds the check for port and per queue Rx/Tx offload to avoid
the failure of "port start all" when config a offload driver didn't
support.
Signed-off-by: Huisong Li <lihuisong@huawei.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@amd.com>
---
app/test-pmd/cmdline.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index b412452948..c641e1f338 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -16238,6 +16238,11 @@ config_port_rx_offload(portid_t port_id, char *name, bool on)
fprintf(stderr, "Unknown offload name: %s\n", name);
return;
}
+ if ((offload & dev_info.rx_offload_capa) == 0) {
+ fprintf(stderr, "Error: port %u doesn't support offload: %s.\n",
+ port_id, name);
+ return;
+ }
}
nb_rx_queues = dev_info.nb_rx_queues;
@@ -16440,6 +16445,11 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result,
fprintf(stderr, "Unknown offload name: %s\n", res->offload);
return;
}
+ if ((offload & dev_info.rx_queue_offload_capa) == 0) {
+ fprintf(stderr, "Error: port %u doesn't support per queue offload: %s.\n",
+ port_id, res->offload);
+ return;
+ }
}
if (!strcmp(res->on_off, "on"))
@@ -16750,6 +16760,11 @@ config_port_tx_offload(portid_t port_id, char *name, bool on)
fprintf(stderr, "Unknown offload name: %s\n", name);
return;
}
+ if ((offload & dev_info.tx_offload_capa) == 0) {
+ fprintf(stderr, "Error: port %u doesn't support offload: %s.\n",
+ port_id, name);
+ return;
+ }
}
nb_tx_queues = dev_info.nb_tx_queues;
@@ -16956,6 +16971,11 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result,
fprintf(stderr, "Unknown offload name: %s\n", res->offload);
return;
}
+ if ((offload & dev_info.tx_queue_offload_capa) == 0) {
+ fprintf(stderr, "Error: port %u doesn't support per queue offload: %s.\n",
+ port_id, res->offload);
+ return;
+ }
}
if (!strcmp(res->on_off, "on"))
--
2.33.0

View File

@ -0,0 +1,38 @@
From 98d550e1521aaf9057161ada27911d79774a7e89 Mon Sep 17 00:00:00 2001
From: Huisong Li <lihuisong@huawei.com>
Date: Mon, 20 Nov 2023 19:14:02 +0800
Subject: [PATCH 405/410] doc: fix hns3 build option about max queue number
[ upstream commit f64a879dbb1f8b508d9cf25dd4a252597f72864c ]
This patch fixes the description of compilation option about setting max
queue number. The maximum queue number of HIP09 and HIP10 is determined
by the RTE_LIBRTE_HNS3_MAX_TQP_NUM_PER_PF and the value the firmware
report.
Fixes: 21938cf4e43e ("doc: add build config option in hns3 guide")
Cc: stable@dpdk.org
Signed-off-by: Huisong Li <lihuisong@huawei.com>
Acked-by: Jie Hai <haijie1@huawei.com>
---
doc/guides/nics/hns3.rst | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/doc/guides/nics/hns3.rst b/doc/guides/nics/hns3.rst
index 8705845d8e..e3e6d3fbd8 100644
--- a/doc/guides/nics/hns3.rst
+++ b/doc/guides/nics/hns3.rst
@@ -69,7 +69,8 @@ The following options can be modified in the ``config/rte_config.h`` file.
- ``RTE_LIBRTE_HNS3_MAX_TQP_NUM_PER_PF`` (default ``256``)
- Number of MAX queues reserved for PF.
+ Number of MAX queues reserved for PF on HIP09 and HIP10.
+ The MAX queue number is also determined by the value the firmware report.
Runtime Configuration
~~~~~~~~~~~~~~~~~~~~~
--
2.33.0

View File

@ -0,0 +1,69 @@
From f7232006181c15d53a70a1c7a4fb142b6c9abec2 Mon Sep 17 00:00:00 2001
From: Huisong Li <lihuisong@huawei.com>
Date: Mon, 20 Nov 2023 19:14:03 +0800
Subject: [PATCH 406/410] doc: update features in hns3 guide
[ upstream commit 97d443f751441c71f8307aea9d9ac2752fa1045c ]
Update the features for hns3.
- "Basic stats" and "Extended stats" supported by
Fixes: 8839c5e202f3 ("net/hns3: support device stats")
- "Traffic Management API" supported by
Fixes: c09c7847d892 ("net/hns3: support traffic management")
- "Speed capabilities" supported by
Fixes: 09e0de1f411b ("net/hns3: report speed capability for PF")
- "Link Auto-negotiation" supported by
Fixes: bdaf190f8235 ("net/hns3: support link speed autoneg for PF")
- "Link flow control" supported by
Fixes: 62e3ccc2b94c ("net/hns3: support flow control")
- "Dump private info from device" supported by
Fixes: 1a03c659cb9d ("net/hns3: dump device basic info")
- "FW version" supported by
Fixes: 1f5ca0b460cd ("net/hns3: support some device operations")
Cc: stable@dpdk.org
Signed-off-by: Huisong Li <lihuisong@huawei.com>
Acked-by: Jie Hai <haijie1@huawei.com>
---
doc/guides/nics/hns3.rst | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/doc/guides/nics/hns3.rst b/doc/guides/nics/hns3.rst
index e3e6d3fbd8..d55c0930a2 100644
--- a/doc/guides/nics/hns3.rst
+++ b/doc/guides/nics/hns3.rst
@@ -30,7 +30,6 @@ Features of the HNS3 PMD are:
- DCB
- Scattered and gather for TX and RX
- Vector Poll mode driver
-- Dump register
- SR-IOV VF
- Multi-process
- MAC/VLAN filter
@@ -38,6 +37,15 @@ Features of the HNS3 PMD are:
- NUMA support
- Generic flow API
- IEEE1588/802.1AS timestamping
+- Basic stats
+- Extended stats
+- Traffic Management API
+- Speed capabilities
+- Link Auto-negotiation
+- Link flow control
+- Dump register
+- Dump private info from device
+- FW version
Prerequisites
-------------
--
2.33.0

View File

@ -0,0 +1,93 @@
From 0ff8cc564dd8483dfcf233063ea9144df37d9ebd Mon Sep 17 00:00:00 2001
From: Huisong Li <lihuisong@huawei.com>
Date: Mon, 20 Nov 2023 19:14:04 +0800
Subject: [PATCH 407/410] doc: fix RSS flow description in hns3 guide
[ upstream commit 9036f9fef8ed7002ba45d78ef1e5c604dfc9948a ]
The hns3 driver supports for creating rule base on input tuple, hash
key, queues and hash algorithm. But hash key, queues and hash algorithm
are the global configuration for hardware which will affect other rules.
The rule just setting input tuple is completely independent.
Fixes: 63a0f65c9572 ("doc: add more description in hns3 guide")
Cc: stable@dpdk.org
Signed-off-by: Huisong Li <lihuisong@huawei.com>
Acked-by: Jie Hai <haijie1@huawei.com>
---
doc/guides/nics/hns3.rst | 42 ++++++++++++++++++++++++++--------------
1 file changed, 28 insertions(+), 14 deletions(-)
diff --git a/doc/guides/nics/hns3.rst b/doc/guides/nics/hns3.rst
index d55c0930a2..5ac64495a6 100644
--- a/doc/guides/nics/hns3.rst
+++ b/doc/guides/nics/hns3.rst
@@ -239,36 +239,50 @@ Generic flow API
- ``RSS Flow``
- RSS Flow supports to set hash input set, hash function, enable hash
- and configure queues.
- For example:
- Configure queues as queue 0, 1, 2, 3.
+ RSS Flow supports for creating rule base on input tuple, hash key, queues
+ and hash algorithm. But hash key, queues and hash algorithm are the global
+ configuration for hardware which will affect other rules.
+ The rule just setting input tuple is completely independent.
+
+ Run ``testpmd``:
.. code-block:: console
- testpmd> flow create 0 ingress pattern end actions rss types end \
- queues 0 1 2 3 end / end
+ dpdk-testpmd -a 0000:7d:00.0 -l 10-18 -- -i --rxq=8 --txq=8
+
+ All IP packets can be distributed to 8 queues.
- Enable hash and set input set for IPv4-TCP.
+ Set IPv4-TCP packet is distributed to 8 queues based on L3/L4 SRC only.
.. code-block:: console
- testpmd> flow create 0 ingress pattern eth / ipv4 / tcp / end \
- actions rss types ipv4-tcp l3-src-only end queues end / end
+ testpmd> flow create 0 ingress pattern eth / ipv4 / tcp / end actions \
+ rss types ipv4-tcp l4-src-only l3-src-only end queues end / end
- Set symmetric hash enable for flow type IPv4-TCP.
+ Disable IPv4 packet RSS hash.
.. code-block:: console
- testpmd> flow create 0 ingress pattern eth / ipv4 / tcp / end \
- actions rss types ipv4-tcp end queues end func symmetric_toeplitz / end
+ testpmd> flow create 0 ingress pattern eth / ipv4 / end actions rss \
+ types none end queues end / end
- Set hash function as simple xor.
+ Set hash function as symmetric Toeplitz.
.. code-block:: console
testpmd> flow create 0 ingress pattern end actions rss types end \
- queues end func simple_xor / end
+ queues end func symmetric_toeplitz / end
+
+ In this case, all packets that enabled RSS are hashed using symmetric
+ Toeplitz algorithm.
+
+ Flush all RSS rules
+
+ .. code-block:: console
+
+ testpmd> flow flush 0
+
+ The RSS configurations of hardwre is back to the one ethdev ops set.
Statistics
----------
--
2.33.0

View File

@ -0,0 +1,70 @@
From 553a6b4c40f9cfd4e0b36cbce53cbd17079061f9 Mon Sep 17 00:00:00 2001
From: Huisong Li <lihuisong@huawei.com>
Date: Tue, 28 Nov 2023 13:59:25 +0800
Subject: [PATCH 408/410] doc: fix description of RSS features
[ upstream commit 46aa6b3cfca8818b8641026274c0a778f2e38a70 ]
This patch fixes the description of RSS feature.
And the setting ot hash algorithm is introduced by 23.11, so add it.
Fixes: 34ff088cc241 ("ethdev: set and query RSS hash algorithm")
Signed-off-by: Huisong Li <lihuisong@huawei.com>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
Acked-by: Ferruh Yigit <ferruh.yigit@amd.com>
---
doc/guides/nics/features.rst | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/doc/guides/nics/features.rst b/doc/guides/nics/features.rst
index dba985a105..9f2da6ac0c 100644
--- a/doc/guides/nics/features.rst
+++ b/doc/guides/nics/features.rst
@@ -276,10 +276,20 @@ RSS hash
Supports RSS hashing on RX.
* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``RTE_ETH_MQ_RX_RSS_FLAG``.
-* **[uses] user config**: ``dev_conf.rx_adv_conf.rss_conf``.
+* **[uses] user config**: ``rss_conf.rss_hf``.
* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_RSS_HASH``.
* **[provides] rte_eth_dev_info**: ``flow_type_rss_offloads``.
* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_RSS_HASH``, ``mbuf.rss``.
+* **[related] API**: ``rte_eth_dev_configure()``, ``rte_eth_dev_rss_hash_update``
+ ``rte_eth_dev_rss_hash_conf_get()``.
+
+Supports RSS hash algorithm on Rx.
+
+* **[implements] eth_dev_ops**: ``dev_configure``, ``rss_hash_update``, ``rss_hash_conf_get``.
+* **[uses] user config**: ``rss_conf.algorithm``
+* **[provides] rte_eth_dev_info**: ``rss_algo_capa``.
+* **[related] API**: ``rte_eth_dev_configure()``, ``rte_eth_dev_rss_hash_update()``,
+ ``rte_eth_dev_rss_hash_conf_get()``.
.. _nic_features_inner_rss:
@@ -287,7 +297,7 @@ Supports RSS hashing on RX.
Inner RSS
---------
-Supports RX RSS hashing on Inner headers.
+Supports RSS hashing on inner headers with flow API.
* **[uses] rte_flow_action_rss**: ``level``.
* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_RSS_HASH``.
@@ -302,9 +312,10 @@ RSS key update
Supports configuration of Receive Side Scaling (RSS) hash computation. Updating
Receive Side Scaling (RSS) hash key.
-* **[implements] eth_dev_ops**: ``rss_hash_update``, ``rss_hash_conf_get``.
+* **[implements] eth_dev_ops**: ``dev_configure``, ``rss_hash_update``, ``rss_hash_conf_get``.
+* **[uses] user config**: ``rss_conf.rss_key``, ``rss_conf.rss_key_len``.
* **[provides] rte_eth_dev_info**: ``hash_key_size``.
-* **[related] API**: ``rte_eth_dev_rss_hash_update()``,
+* **[related] API**: ``rte_eth_dev_configure()``, ``rte_eth_dev_rss_hash_update()``,
``rte_eth_dev_rss_hash_conf_get()``.
--
2.33.0

View File

@ -0,0 +1,93 @@
From 8f2d27fad53653546a97da1f691575ed153bd12f Mon Sep 17 00:00:00 2001
From: Jie Hai <haijie1@huawei.com>
Date: Fri, 1 Dec 2023 16:52:53 +0800
Subject: [PATCH 409/410] ethdev: add new API to get RSS hash algorithm by name
[ upstream commit c4b01b7cc50e1eb991310549455cc53bac6d47ad ]
This patch supports conversion from names to hash algorithm
(see RTE_ETH_HASH_FUNCTION_XXX).
Signed-off-by: Jie Hai <haijie1@huawei.com>
Reviewed-by: Huisong Li <lihuisong@huawei.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@amd.com>
---
lib/ethdev/rte_ethdev.c | 15 +++++++++++++++
lib/ethdev/rte_ethdev.h | 20 ++++++++++++++++++++
lib/ethdev/version.map | 3 +++
3 files changed, 38 insertions(+)
diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 310b39775d..10312b3e13 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -4321,6 +4321,21 @@ rte_eth_dev_rss_algo_name(enum rte_eth_hash_function rss_algo)
return name;
}
+int
+rte_eth_find_rss_algo(const char *name, uint32_t *algo)
+{
+ unsigned int i;
+
+ for (i = 0; i < RTE_DIM(rte_eth_dev_rss_algo_names); i++) {
+ if (strcmp(name, rte_eth_dev_rss_algo_names[i].name) == 0) {
+ *algo = rte_eth_dev_rss_algo_names[i].algo;
+ return 0;
+ }
+ }
+
+ return -EINVAL;
+}
+
int
rte_eth_dev_udp_tunnel_port_add(uint16_t port_id,
struct rte_eth_udp_tunnel *udp_tunnel)
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index 2880a55890..e0c132cebc 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -4420,6 +4420,26 @@ __rte_experimental
const char *
rte_eth_dev_rss_algo_name(enum rte_eth_hash_function rss_algo);
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change, or be removed, without prior notice.
+ *
+ * Get RSS hash algorithm by its name.
+ *
+ * @param name
+ * RSS hash algorithm.
+ *
+ * @param algo
+ * return the RSS hash algorithm found, @see rte_eth_hash_function.
+ *
+ * @return
+ * - (0) if successful.
+ * - (-EINVAL) if not found.
+ */
+__rte_experimental
+int
+rte_eth_find_rss_algo(const char *name, uint32_t *algo);
+
/**
* Add UDP tunneling port for a type of tunnel.
*
diff --git a/lib/ethdev/version.map b/lib/ethdev/version.map
index 1867016054..44cbe04e9b 100644
--- a/lib/ethdev/version.map
+++ b/lib/ethdev/version.map
@@ -268,6 +268,9 @@ EXPERIMENTAL {
# added in 23.11
rte_eth_dev_rss_algo_name;
+
+ # added in 24.03
+ rte_eth_find_rss_algo;
};
INTERNAL {
--
2.33.0

View File

@ -0,0 +1,151 @@
From 57956d5be671d99089e2ac8e16b8f21adced950c Mon Sep 17 00:00:00 2001
From: Jie Hai <haijie1@huawei.com>
Date: Fri, 1 Dec 2023 16:52:54 +0800
Subject: [PATCH 410/410] app/testpmd: support set RSS hash algorithm
[ upstream commit 7516242a7c7fc7a5adbfbd7d71b4f28ebdb26ffb ]
Since API rte_eth_dev_rss_hash_update() supports setting RSS hash
algorithm, add new command to support it:
testpmd> port config 0 rss-hash-algo symmetric_toeplitz
Signed-off-by: Jie Hai <haijie1@huawei.com>
Reviewed-by: Huisong Li <lihuisong@huawei.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@amd.com>
---
app/test-pmd/cmdline.c | 81 +++++++++++++++++++++
doc/guides/testpmd_app_ug/testpmd_funcs.rst | 11 +++
2 files changed, 92 insertions(+)
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index c641e1f338..ae0b47de72 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -814,6 +814,10 @@ static void cmd_help_long_parsed(void *parsed_result,
"port config port-id rss reta (hash,queue)[,(hash,queue)]\n"
" Set the RSS redirection table.\n\n"
+ "port config (port_id) rss-hash-algo (default|simple_xor|toeplitz|"
+ "symmetric_toeplitz|symmetric_toeplitz_sort)\n"
+ " Set the RSS hash algorithm.\n\n"
+
"port config (port_id) dcb vt (on|off) (traffic_class)"
" pfc (on|off)\n"
" Set the DCB mode.\n\n"
@@ -2408,6 +2412,82 @@ cmdline_parse_inst_t cmd_config_rss_hash_key = {
},
};
+/* *** configure rss hash algorithm *** */
+struct cmd_config_rss_hash_algo {
+ cmdline_fixed_string_t port;
+ cmdline_fixed_string_t config;
+ portid_t port_id;
+ cmdline_fixed_string_t rss_hash_algo;
+ cmdline_fixed_string_t algo;
+};
+
+static void
+cmd_config_rss_hash_algo_parsed(void *parsed_result,
+ __rte_unused struct cmdline *cl,
+ __rte_unused void *data)
+{
+ struct cmd_config_rss_hash_algo *res = parsed_result;
+ uint8_t rss_key[RSS_HASH_KEY_LENGTH];
+ struct rte_eth_rss_conf rss_conf;
+ uint32_t algorithm;
+ int ret;
+
+ rss_conf.rss_key_len = RSS_HASH_KEY_LENGTH;
+ rss_conf.rss_key = rss_key;
+ ret = rte_eth_dev_rss_hash_conf_get(res->port_id, &rss_conf);
+ if (ret != 0) {
+ fprintf(stderr, "failed to get port %u RSS configuration\n",
+ res->port_id);
+ return;
+ }
+
+ algorithm = (uint32_t)rss_conf.algorithm;
+ ret = rte_eth_find_rss_algo(res->algo, &algorithm);
+ if (ret != 0) {
+ fprintf(stderr, "port %u configured invalid RSS hash algorithm: %s\n",
+ res->port_id, res->algo);
+ return;
+ }
+
+ ret = rte_eth_dev_rss_hash_update(res->port_id, &rss_conf);
+ if (ret != 0) {
+ fprintf(stderr, "failed to set port %u RSS hash algorithm\n",
+ res->port_id);
+ return;
+ }
+}
+
+static cmdline_parse_token_string_t cmd_config_rss_hash_algo_port =
+ TOKEN_STRING_INITIALIZER(struct cmd_config_rss_hash_algo, port, "port");
+static cmdline_parse_token_string_t cmd_config_rss_hash_algo_config =
+ TOKEN_STRING_INITIALIZER(struct cmd_config_rss_hash_algo, config,
+ "config");
+static cmdline_parse_token_num_t cmd_config_rss_hash_algo_port_id =
+ TOKEN_NUM_INITIALIZER(struct cmd_config_rss_hash_algo, port_id,
+ RTE_UINT16);
+static cmdline_parse_token_string_t cmd_config_rss_hash_algo_rss_hash_algo =
+ TOKEN_STRING_INITIALIZER(struct cmd_config_rss_hash_algo,
+ rss_hash_algo, "rss-hash-algo");
+static cmdline_parse_token_string_t cmd_config_rss_hash_algo_algo =
+ TOKEN_STRING_INITIALIZER(struct cmd_config_rss_hash_algo, algo,
+ "default#simple_xor#toeplitz#"
+ "symmetric_toeplitz#symmetric_toeplitz_sort");
+
+static cmdline_parse_inst_t cmd_config_rss_hash_algo = {
+ .f = cmd_config_rss_hash_algo_parsed,
+ .data = NULL,
+ .help_str = "port config <port_id> rss-hash-algo "
+ "default|simple_xor|toeplitz|symmetric_toeplitz|symmetric_toeplitz_sort",
+ .tokens = {
+ (void *)&cmd_config_rss_hash_algo_port,
+ (void *)&cmd_config_rss_hash_algo_config,
+ (void *)&cmd_config_rss_hash_algo_port_id,
+ (void *)&cmd_config_rss_hash_algo_rss_hash_algo,
+ (void *)&cmd_config_rss_hash_algo_algo,
+ NULL,
+ },
+};
+
/* *** cleanup txq mbufs *** */
struct cmd_cleanup_txq_mbufs_result {
cmdline_fixed_string_t port;
@@ -18084,6 +18164,7 @@ cmdline_parse_ctx_t main_ctx[] = {
(cmdline_parse_inst_t *)&cmd_showport_rss_hash_key,
(cmdline_parse_inst_t *)&cmd_showport_rss_hash_algo,
(cmdline_parse_inst_t *)&cmd_config_rss_hash_key,
+ (cmdline_parse_inst_t *)&cmd_config_rss_hash_algo,
(cmdline_parse_inst_t *)&cmd_cleanup_txq_mbufs,
(cmdline_parse_inst_t *)&cmd_dump,
(cmdline_parse_inst_t *)&cmd_dump_one,
diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
index 226569c545..86938d53ee 100644
--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
@@ -2445,6 +2445,17 @@ hash of input [IP] packets received on port::
ipv6-udp-ex <string of hex digits \
(variable length, NIC dependent)>)
+
+port config rss hash algorithm
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+To configure the RSS hash algorithm used to compute the RSS
+hash of input packets received on port::
+
+ testpmd> port config <port_id> rss-hash-algo (default|\
+ simple_xor|toeplitz|symmetric_toeplitz|\
+ symmetric_toeplitz_sort)
+
port cleanup txq mbufs
~~~~~~~~~~~~~~~~~~~~~~
--
2.33.0

View File

@ -1,6 +1,6 @@
Name: dpdk
Version: 21.11
Release: 60
Release: 61
Packager: packaging@6wind.com
URL: http://dpdk.org
%global source_version 21.11
@ -428,6 +428,19 @@ Patch1001: 1001-add-sw_64-support-not-upstream-new.patch
Patch6395: 0395-net-hns3-fix-ignored-reset-event.patch
Patch6396: 0396-net-hns3-fix-reset-event-status.patch
Patch6397: 0397-net-hns3-fix-VF-reset-handler-interruption.patch
Patch6398: 0398-app-testpmd-remove-useless-check-in-TSO-command.patch
Patch6399: 0399-app-testpmd-fix-tunnel-TSO-capability-check.patch
Patch6400: 0400-app-testpmd-add-explicit-check-for-tunnel-TSO.patch
Patch6401: 0401-app-testpmd-fix-tunnel-TSO-configuration.patch
Patch6402: 0402-app-testpmd-allow-offload-config-for-all-ports.patch
Patch6403: 0403-app-testpmd-fix-Tx-offload-command.patch
Patch6404: 0404-app-testpmd-check-port-and-queue-Rx-Tx-offloads.patch
Patch6405: 0405-doc-fix-hns3-build-option-about-max-queue-number.patch
Patch6406: 0406-doc-update-features-in-hns3-guide.patch
Patch6407: 0407-doc-fix-RSS-flow-description-in-hns3-guide.patch
Patch6408: 0408-doc-fix-description-of-RSS-features.patch
Patch6409: 0409-ethdev-add-new-API-to-get-RSS-hash-algorithm-by-name.patch
Patch6410: 0410-app-testpmd-support-set-RSS-hash-algorithm.patch
Summary: Data Plane Development Kit core
Group: System Environment/Libraries
@ -583,6 +596,23 @@ strip -g $RPM_BUILD_ROOT/lib/modules/%{kern_devel_ver}/extra/dpdk/igb_uio.ko
/usr/sbin/depmod
%changelog
* Fri Dec 8 2023 huangdengdui <huangdengui@huawei.com> - 21.11-61
Sync some bugfix from upstreaming about testpmd and doc, modifies
are as follow:
- support set RSS hash algorithm
- ethdev: add new API to get RSS hash algorithm by name
- doc: fix description of RSS features
- doc: fix RSS flow description in hns3 guide
- doc: update features in hns3 guide
- doc: fix hns3 build option about max queue number
- app/testpmd: check port and queue Rx/Tx offloads
- app/testpmd: fix Tx offload command
- app/testpmd: allow offload config for all ports
- app/testpmd: fix tunnel TSO configuration
- app/testpmd: add explicit check for tunnel TSO
- app/testpmd: fix tunnel TSO capability check
- app/testpmd: remove useless check in TSO command
* Fri Dec 8 2023 huangdengdui <huangdengui@huawei.com> - 21.11-60
Sync some bugfix from upstreaming about hns3 reset and modifies
are as follow: