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 Signed-off-by: Dengdui Huang <huangdengdui@huawei.com> (cherry picked from commit 7868d4e3ae469277d4b47241e84c77f53e09423b)
121 lines
4.8 KiB
Diff
121 lines
4.8 KiB
Diff
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
|
|
|