On 11/11/2023 1:17 AM, lihuisong (C) wrote: > Hi, > > Thanks for your review. > > > 在 2023/11/10 19:42, Ivan Malov 写道: >> Hi, >> >> (minor question below) >> >> On Fri, 10 Nov 2023, Huisong Li wrote: >> >>> 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: sta...@dpdk.org >>> >>> Signed-off-by: Huisong Li <lihuis...@huawei.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 05078f8377..25462bdbfc 100644 >>> --- a/app/test-pmd/cmdline.c >>> +++ b/app/test-pmd/cmdline.c >>> @@ -5035,39 +5035,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; >> >> Why not just initialise this to zeros? > The main purpose of this function is to check which tunnel TSO offload > port supports instead of getting dev_info, right? >
Agree with Huisong, zeroing out the dev_info doesn't help much, this function still will fail to do its job, and caller function will still get wrong 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 >>> @@ -5077,6 +5071,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; >>> @@ -5088,7 +5083,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 >>> >>> >> >> Thank you. >> >> .