All of lore.kernel.org
 help / color / mirror / Atom feed
From: "lihuisong (C)" <lihuisong@huawei.com>
To: Ferruh Yigit <ferruh.yigit@xilinx.com>, <xiaoyun.li@intel.com>,
	<aman.deep.singh@intel.com>, <yuying.zhang@intel.com>,
	<andrew.rybchenko@oktetlabs.ru>
Cc: <dev@dpdk.org>, <thomas@monjalon.net>, <huangdaode@huawei.com>
Subject: Re: [PATCH V3 app/testpmd 1/4] app/testpmd: fix supported RSS offload display
Date: Tue, 21 Jun 2022 10:17:04 +0800	[thread overview]
Message-ID: <e9662a66-89a8-622f-ff1f-e45684083dd9@huawei.com> (raw)
In-Reply-To: <04f8806c-0dfe-67a3-0027-c21465b29a77@xilinx.com>


在 2022/6/20 20:35, Ferruh Yigit 写道:
> On 6/9/2022 4:25 AM, lihuisong (C) wrote:
>> CAUTION: This message has originated from an External Source. Please 
>> use proper judgment and caution when opening attachments, clicking 
>> links, or responding to this email.
>>
>>
>> 在 2022/6/7 23:45, Ferruh Yigit 写道:
>>> On 6/7/2022 9:32 AM, Huisong Li wrote:
>>>
>>>>
>>>> And rte_eth_dev_info.flow_type_rss_offloads is populated in terms of
>>>> RTE_ETH_RSS_* bits. If PMD sets RTE_ETH_RSS_L3_SRC_ONLY to
>>>> dev_info->flow_type_rss_offloads. testpmd will display "user 
>>>> defined 63"
>>>> when run 'show port info 0'. Because testpmd use flowtype_to_str()
>>>> to display the supported RSS offload of PMD. In fact, the function is
>>>> used to display flow type in FDIR commands. This patch uses the
>>>> RTE_ETH_RSS_* bits to display supported RSS offload of PMD.
>>>>
>>>> Fixes: b12964f621dc ("ethdev: unification of RSS offload types")
>>>> Cc: stable@dpdk.org
>>>>
>>>> Signed-off-by: Huisong Li <lihuisong@huawei.com>
>>>> Signed-off-by: Ferruh Yigit <ferruh.yigit@xilinx.com>
>>>> ---
>>>>   app/test-pmd/config.c | 85 
>>>> ++++++++++++++++++++++++++++++++++++++-----
>>>>   1 file changed, 75 insertions(+), 10 deletions(-)
>>>>
>>>> diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
>>>> index 72d2606d19..d290ca3a06 100644
>>>> --- a/app/test-pmd/config.c
>>>> +++ b/app/test-pmd/config.c
>>>> @@ -86,6 +86,56 @@ static const struct {
>>>>          },
>>>>   };
>>>>
>>>> +const struct rss_type_info rss_offload_table[] = {
>>>> +       {"ipv4", RTE_ETH_RSS_IPV4},
>>>> +       {"ipv4-frag", RTE_ETH_RSS_FRAG_IPV4},
>>>> +       {"ipv4-tcp", RTE_ETH_RSS_NONFRAG_IPV4_TCP},
>>>> +       {"ipv4-udp", RTE_ETH_RSS_NONFRAG_IPV4_UDP},
>>>> +       {"ipv4-sctp", RTE_ETH_RSS_NONFRAG_IPV4_SCTP},
>>>> +       {"ipv4-other", RTE_ETH_RSS_NONFRAG_IPV4_OTHER},
>>>> +       {"ipv6", RTE_ETH_RSS_IPV6},
>>>> +       {"ipv6-frag", RTE_ETH_RSS_FRAG_IPV6},
>>>> +       {"ipv6-tcp", RTE_ETH_RSS_NONFRAG_IPV6_TCP},
>>>> +       {"ipv6-udp", RTE_ETH_RSS_NONFRAG_IPV6_UDP},
>>>> +       {"ipv6-sctp", RTE_ETH_RSS_NONFRAG_IPV6_SCTP},
>>>> +       {"ipv6-other", RTE_ETH_RSS_NONFRAG_IPV6_OTHER},
>>>> +       {"l2_payload", RTE_ETH_RSS_L2_PAYLOAD},
>>>> +       {"ipv6-ex", RTE_ETH_RSS_IPV6_EX},
>>>> +       {"ipv6-tcp-ex", RTE_ETH_RSS_IPV6_TCP_EX},
>>>> +       {"ipv6-udp-ex", RTE_ETH_RSS_IPV6_UDP_EX},
>>>> +       {"port", RTE_ETH_RSS_PORT},
>>>> +       {"vxlan", RTE_ETH_RSS_VXLAN},
>>>> +       {"geneve", RTE_ETH_RSS_GENEVE},
>>>> +       {"nvgre", RTE_ETH_RSS_NVGRE},
>>>> +       {"gtpu", RTE_ETH_RSS_GTPU},
>>>> +       {"eth", RTE_ETH_RSS_ETH},
>>>> +       {"s-vlan", RTE_ETH_RSS_S_VLAN},
>>>> +       {"c-vlan", RTE_ETH_RSS_C_VLAN},
>>>> +       {"esp", RTE_ETH_RSS_ESP},
>>>> +       {"ah", RTE_ETH_RSS_AH},
>>>> +       {"l2tpv3", RTE_ETH_RSS_L2TPV3},
>>>> +       {"pfcp", RTE_ETH_RSS_PFCP},
>>>> +       {"pppoe", RTE_ETH_RSS_PPPOE},
>>>> +       {"ecpri", RTE_ETH_RSS_ECPRI},
>>>> +       {"mpls", RTE_ETH_RSS_MPLS},
>>>> +       {"ipv4-chksum", RTE_ETH_RSS_IPV4_CHKSUM},
>>>> +       {"l4-chksum", RTE_ETH_RSS_L4_CHKSUM},
>>>> +       {"l2tpv2", RTE_ETH_RSS_L2TPV2},
>>>> +       {"l3-pre96", RTE_ETH_RSS_L3_PRE96},
>>>> +       {"l3-pre64", RTE_ETH_RSS_L3_PRE64},
>>>> +       {"l3-pre56", RTE_ETH_RSS_L3_PRE56},
>>>> +       {"l3-pre48", RTE_ETH_RSS_L3_PRE48},
>>>> +       {"l3-pre40", RTE_ETH_RSS_L3_PRE40},
>>>> +       {"l3-pre32", RTE_ETH_RSS_L3_PRE32},
>>>> +       {"l2-dst-only", RTE_ETH_RSS_L2_DST_ONLY},
>>>> +       {"l2-src-only", RTE_ETH_RSS_L2_SRC_ONLY},
>>>> +       {"l4-dst-only", RTE_ETH_RSS_L4_DST_ONLY},
>>>> +       {"l4-src-only", RTE_ETH_RSS_L4_SRC_ONLY},
>>>> +       {"l3-dst-only", RTE_ETH_RSS_L3_DST_ONLY},
>>>> +       {"l3-src-only", RTE_ETH_RSS_L3_SRC_ONLY},
>>>> +       {NULL, 0},
>>>> +};
>>>> +
>>>
>>> Hi Huisong,
>>>
>>> Why not reusing existing 'rss_type_table[]', but adding a new one?
>>> Is it to have each individual RSS type instead of grouping
>>> 'rss_type_table[]' has? If so, since command "port config all rss ..."
>>> using the grouping, I think it makes sense to have grouping.
>>>
>> The 'rss_offload_table[]' includes all defined RSS offloads in ethdev
>> layer, every iterm has one bit,
>> and is part of 'rss_type_table[]'. Some iterms in 'rss_type_table[]'
>> consist of multiple bits. If we
>> want to display all RSS offloads PMD supported and resolve undefined
>> offload, we have to check
>> 'flow_type_rss_offloads' bit by bit. However, "port config all rss ..."
>> and "show port 0 rss-hash"
>> commands supports the configuration and display of multiple offload bits
>> at a time. So it is necessary
>> to introduce this 'rss_offload_table[]' to display
>> 'flow_type_rss_offloads'. That's what I think.
>
> 'rss_type_table[]' has both group and individual types, so show 
> functions displays both.
>
> A sample of grouping is UDP, a few UDP flags compined under UDP,
> #define RTE_ETH_RSS_UDP ( \
>         RTE_ETH_RSS_NONFRAG_IPV4_UDP | \
>         RTE_ETH_RSS_NONFRAG_IPV6_UDP | \
>         RTE_ETH_RSS_IPV6_UDP_EX)
>
> Above mentioned commands use 'RTE_ETH_RSS_UDP' to set "udp" type RSS, 
> and when displying instead of displaying each above type separately, I 
> think displaying as "udp" makes sense.
>
> And again I believe having two different arrays is prone to error for 
> future.
Agreed.
>
>>> Another thing is having two different array with very similar content
>>> is easy to confuse and can cause diversion on arrays and generate bugs.
>>>
>> Add some notes about the use of the 'rss_offload_table[]'?
>>>
>>> As mentioned from "port config all rss ..." command, it seems it is
>>> also not using 'rss_type_table[]', but all string to RSS type matching
>>> done within the function ('cmd_config_rss_parsed()') duplicating what
>>> we have in 'rss_type_table[]'. Again this has concern to diverge
>>> between set and show functions.
>>> If you have time for it, can you make an additional patch to update
>>> 'cmd_config_rss_parsed()' to use new 'str_to_rsstypes()' function?
>> All right. Let's fix it.
>
> Thanks, and if you want it can be a separate patch on top of this one, 
> it doesn't have to be part of this set if you don't have time for it.
>
I think it's better to do it in this patch set. So I will do it.
>>>
>>> Thanks,
>>> ferruh
>>>
>>>>   const struct rss_type_info rss_type_table[] = {
>>>>          { "all", RTE_ETH_RSS_ETH | RTE_ETH_RSS_VLAN | RTE_ETH_RSS_IP
>>>> | RTE_ETH_RSS_TCP |
>>>>                  RTE_ETH_RSS_UDP | RTE_ETH_RSS_SCTP |
>>>> RTE_ETH_RSS_L2_PAYLOAD |
>>>> @@ -675,6 +725,19 @@ print_dev_capabilities(uint64_t capabilities)
>>>>          }
>>>>   }
>>>>
>>>> +static const char *
>>>> +rss_offload_to_str(uint64_t rss_offload)
>>>> +{
>>>> +       uint16_t i;
>>>> +
>>>> +       for (i = 0; rss_offload_table[i].str != NULL; i++) {
>>>> +               if (rss_offload_table[i].rss_type == rss_offload)
>>>> +                       return rss_offload_table[i].str;
>>>> +       }
>>>> +
>>>> +       return NULL;
>>>> +}
>>>> +
>>>>   void
>>>>   port_infos_display(portid_t port_id)
>>>>   {
>>>> @@ -779,19 +842,21 @@ port_infos_display(portid_t port_id)
>>>>          if (!dev_info.flow_type_rss_offloads)
>>>>                  printf("No RSS offload flow type is supported.\n");
>>>>          else {
>>>> +               uint64_t rss_offload_types =
>>>> dev_info.flow_type_rss_offloads;
>>>>                  uint16_t i;
>>>> -               char *p;
>>>>
>>>>                  printf("Supported RSS offload flow types:\n");
>>>> -               for (i = RTE_ETH_FLOW_UNKNOWN + 1;
>>>> -                    i < sizeof(dev_info.flow_type_rss_offloads) *
>>>> CHAR_BIT; i++) {
>>>> -                       if (!(dev_info.flow_type_rss_offloads & (1ULL
>>>> << i)))
>>>> -                               continue;
>>>> -                       p = flowtype_to_str(i);
>>>> -                       if (p)
>>>> -                               printf("  %s\n", p);
>>>> -                       else
>>>> -                               printf("  user defined %d\n", i);
>>>> +               for (i = 0; i < sizeof(rss_offload_types) * CHAR_BIT;
>>>> i++) {
>>>> +                       uint64_t rss_offload = RTE_BIT64(i);
>>>> +                       if ((rss_offload_types & rss_offload) != 0) {
>>>> +                               const char *p =
>>>> + rss_offload_to_str(rss_offload);
>>>> +                               if (p)
>>>> +                                       printf("  %s\n", p);
>>>> +                               else
>>>> +                                       printf("  user defined
>>>> 0x%"PRIx64"\n",
>>>> +                                              rss_offload);
>>>> +                       }
>>>
>>> If you go with 'rss_type_table[]', you need to change above logic as
>>> you did in your v2.
>>>
>>>>                  }
>>>>          }
>>>>
>>>> -- 
>>>> 2.33.0
>>>>
>>>
>>> .
>
> .

  reply	other threads:[~2022-06-21  2:17 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-29 10:24 [PATCH V2 0/2] fix RSS types display Huisong Li
2022-04-29 10:24 ` [PATCH V2 1/2] app/testpmd: fix supported RSS offload display Huisong Li
2022-04-29 10:24 ` [PATCH V2 2/2] app/testpmd: unify RSS types display Huisong Li
2022-06-07  8:32 ` [PATCH V3 app/testpmd 0/4] fix RSS types and flow type Huisong Li
2022-06-07  8:32   ` [PATCH V3 app/testpmd 1/4] app/testpmd: fix supported RSS offload display Huisong Li
2022-06-07 15:45     ` Ferruh Yigit
2022-06-09  3:25       ` lihuisong (C)
2022-06-17  1:38         ` lihuisong (C)
2022-06-20 12:35         ` Ferruh Yigit
2022-06-21  2:17           ` lihuisong (C) [this message]
2022-06-07  8:32   ` [PATCH V3 app/testpmd 2/4] app/testpmd: unify RSS types display and obtaination Huisong Li
2022-06-07 15:46     ` Ferruh Yigit
2022-06-09  3:25       ` lihuisong (C)
2022-06-07  8:32   ` [PATCH V3 app/testpmd 3/4] app/testpmd: compact RSS types output in some commands Huisong Li
2022-06-07 15:46     ` Ferruh Yigit
2022-06-09  3:41       ` lihuisong (C)
2022-06-20 12:37         ` Ferruh Yigit
2022-06-07  8:32   ` [PATCH V3 app/testpmd 4/4] app/testpmd: remove duplicated flow type to string table Huisong Li
2022-06-07 15:47     ` Ferruh Yigit
2022-06-09  3:26       ` lihuisong (C)
2022-06-20 12:38         ` Ferruh Yigit
2022-06-21  2:18           ` lihuisong (C)
2022-06-21  7:51             ` Ferruh Yigit
2022-06-21 12:21               ` lihuisong (C)
2022-06-24  4:12 ` [PATCH V4 0/7] app/testpmd: fix RSS and flow type Huisong Li
2022-06-24  4:12   ` [PATCH V4 1/7] app/testpmd: fix supported RSS offload display Huisong Li
2022-06-24  4:12   ` [PATCH V4 2/7] app/testpmd: unify the name of L2 payload offload Huisong Li
2022-06-24  4:12   ` [PATCH V4 3/7] app/testpmd: refactor config all RSS command Huisong Li
2022-06-24  4:12   ` [PATCH V4 4/7] app/testpmd: unify RSS types display Huisong Li
2022-06-24  4:12   ` [PATCH V4 5/7] app/testpmd: compact RSS types output in some commands Huisong Li
2022-06-24  4:12   ` [PATCH V4 6/7] app/testpmd: reorder elements in RSS type table array Huisong Li
2022-06-24  4:12   ` [PATCH V4 7/7] app/testpmd: remove duplicated flow type to string table Huisong Li
2022-06-24  7:23 ` [PATCH V5 0/7] app/testpmd: fix RSS and flow type Huisong Li
2022-06-24  7:23   ` [PATCH V5 1/7] app/testpmd: fix supported RSS offload display Huisong Li
2022-06-24 13:01     ` Ferruh Yigit
2022-06-25  2:12       ` lihuisong (C)
2022-06-28 13:18         ` Ferruh Yigit
2022-06-24  7:23   ` [PATCH V5 2/7] app/testpmd: unify the name of L2 payload offload Huisong Li
2022-06-24 13:53     ` Ferruh Yigit
2022-06-25  2:12       ` lihuisong (C)
2022-06-28 13:17         ` Ferruh Yigit
2022-06-29  1:47           ` lihuisong (C)
2022-06-24  7:23   ` [PATCH V5 3/7] app/testpmd: refactor config all RSS command Huisong Li
2022-06-24 13:55     ` Ferruh Yigit
2022-06-25  2:13       ` lihuisong (C)
2022-06-24  7:23   ` [PATCH V5 4/7] app/testpmd: unify RSS types display Huisong Li
2022-06-24  7:23   ` [PATCH V5 5/7] app/testpmd: compact RSS types output in some commands Huisong Li
2022-06-24 14:04     ` Ferruh Yigit
2022-06-25  2:13       ` lihuisong (C)
2022-06-28 13:18         ` Ferruh Yigit
2022-06-24  7:24   ` [PATCH V5 6/7] app/testpmd: reorder elements in RSS type table array Huisong Li
2022-06-24 14:00     ` Ferruh Yigit
2022-06-25  2:14       ` lihuisong (C)
2022-06-24  7:24   ` [PATCH V5 7/7] app/testpmd: remove duplicated flow type to string table Huisong Li
2022-06-24  8:55   ` [PATCH V5 0/7] app/testpmd: fix RSS and flow type lihuisong (C)
2022-06-24  8:59     ` David Marchand
2022-06-24  9:54       ` lihuisong (C)
2022-06-24 10:44         ` Ferruh Yigit
2022-06-25  1:09           ` lihuisong (C)
2022-06-28 13:18             ` Ferruh Yigit
2022-06-29  8:34 ` [PATCH V6 0/8] " Huisong Li
2022-06-29  8:34   ` [PATCH V6 1/8] app/testpmd: fix supported RSS offload display Huisong Li
2022-06-29  8:34   ` [PATCH V6 2/8] app/testpmd: unify the name of L2 payload offload Huisong Li
2022-06-29  8:34   ` [PATCH V6 3/8] doc: testpmd rename RSS type ether to L2 payload Huisong Li
2022-06-29  8:34   ` [PATCH V6 4/8] app/testpmd: refactor config all RSS command Huisong Li
2022-06-29  8:34   ` [PATCH V6 5/8] app/testpmd: unify RSS types display Huisong Li
2022-06-29  8:34   ` [PATCH V6 6/8] app/testpmd: compact RSS types output in some commands Huisong Li
2022-06-29  8:34   ` [PATCH V6 7/8] app/testpmd: reorder elements in RSS type table array Huisong Li
2022-06-29  8:34   ` [PATCH V6 8/8] app/testpmd: remove duplicated flow type to string table Huisong Li
2022-06-29  9:59   ` [PATCH V6 0/8] app/testpmd: fix RSS and flow type lihuisong (C)
2022-06-29 14:13     ` Ferruh Yigit
2022-06-29 20:05   ` 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=e9662a66-89a8-622f-ff1f-e45684083dd9@huawei.com \
    --to=lihuisong@huawei.com \
    --cc=aman.deep.singh@intel.com \
    --cc=andrew.rybchenko@oktetlabs.ru \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@xilinx.com \
    --cc=huangdaode@huawei.com \
    --cc=thomas@monjalon.net \
    --cc=xiaoyun.li@intel.com \
    --cc=yuying.zhang@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.