[v3] net/i40e: fix queue region issue in RSS flow
Checks
Commit Message
This patch fixes the issue that the queue region does not
take effect due to incorrectly setting the flow type.
Fixes: ecad87d22383 ("net/i40e: move RSS to flow API")
Cc: stable@dpdk.org
Signed-off-by: Shougang Wang <shougangx.wang@intel.com>
Reviewed-by: Jeff Guo <jia.guo@intel.com>
---
drivers/net/i40e/i40e_flow.c | 35 ++++++++++++++++++++++++++++++++---
1 file changed, 32 insertions(+), 3 deletions(-)
Comments
Tested-by: Cui, Lunyuan <lunyuanx.cui@intel.com>
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Shougang Wang
> Sent: Wednesday, May 13, 2020 11:33 AM
> To: dev@dpdk.org
> Cc: Xing, Beilei <beilei.xing@intel.com>; Guo, Jia <jia.guo@intel.com>; Wang,
> ShougangX <shougangx.wang@intel.com>; stable@dpdk.org
> Subject: [dpdk-dev] [PATCH v3] net/i40e: fix queue region issue in RSS flow
>
> This patch fixes the issue that the queue region does not take effect due to
> incorrectly setting the flow type.
>
> Fixes: ecad87d22383 ("net/i40e: move RSS to flow API")
> Cc: stable@dpdk.org
>
> Signed-off-by: Shougang Wang <shougangx.wang@intel.com>
> Reviewed-by: Jeff Guo <jia.guo@intel.com>
> ---
> drivers/net/i40e/i40e_flow.c | 35 ++++++++++++++++++++++++++++++++-
> --
> 1 file changed, 32 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/i40e/i40e_flow.c b/drivers/net/i40e/i40e_flow.c
> index 7e64ae53a..2f937567b 100644
> --- a/drivers/net/i40e/i40e_flow.c
> +++ b/drivers/net/i40e/i40e_flow.c
> @@ -4625,6 +4625,34 @@ i40e_flow_parse_rss_action(struct rte_eth_dev
> *dev,
> uint32_t index = 0;
> uint64_t hf_bit = 1;
>
> + static const struct {
> + uint64_t rss_type;
> + enum i40e_filter_pctype pctype;
> + } pctype_match_table[] = {
> + {ETH_RSS_FRAG_IPV4,
> + I40E_FILTER_PCTYPE_FRAG_IPV4},
> + {ETH_RSS_NONFRAG_IPV4_TCP,
> + I40E_FILTER_PCTYPE_NONF_IPV4_TCP},
> + {ETH_RSS_NONFRAG_IPV4_UDP,
> + I40E_FILTER_PCTYPE_NONF_IPV4_UDP},
> + {ETH_RSS_NONFRAG_IPV4_SCTP,
> + I40E_FILTER_PCTYPE_NONF_IPV4_SCTP},
> + {ETH_RSS_NONFRAG_IPV4_OTHER,
> + I40E_FILTER_PCTYPE_NONF_IPV4_OTHER},
> + {ETH_RSS_FRAG_IPV6,
> + I40E_FILTER_PCTYPE_FRAG_IPV6},
> + {ETH_RSS_NONFRAG_IPV6_TCP,
> + I40E_FILTER_PCTYPE_NONF_IPV6_TCP},
> + {ETH_RSS_NONFRAG_IPV6_UDP,
> + I40E_FILTER_PCTYPE_NONF_IPV6_UDP},
> + {ETH_RSS_NONFRAG_IPV6_SCTP,
> + I40E_FILTER_PCTYPE_NONF_IPV6_SCTP},
> + {ETH_RSS_NONFRAG_IPV6_OTHER,
> + I40E_FILTER_PCTYPE_NONF_IPV6_OTHER},
> + {ETH_RSS_L2_PAYLOAD,
> + I40E_FILTER_PCTYPE_L2_PAYLOAD},
> + };
> +
> NEXT_ITEM_OF_ACTION(act, actions, index);
> rss = act->conf;
>
> @@ -4641,9 +4669,10 @@ i40e_flow_parse_rss_action(struct rte_eth_dev
> *dev,
> }
>
> if (p_info.action_flag) {
> - for (n = 0; n < 64; n++) {
> - if (rss->types & (hf_bit << n)) {
> - conf_info->region[0].hw_flowtype[0] = n;
> + for (j = 0; j < RTE_DIM(pctype_match_table); j++) {
> + if (rss->types & pctype_match_table[j].rss_type) {
> + conf_info->region[0].hw_flowtype[0] =
> +
> (uint8_t)pctype_match_table[j].pctype;
> conf_info->region[0].flowtype_num = 1;
> conf_info->queue_region_number = 1;
> break;
> --
> 2.17.1
Hi Shougang,
> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Shougang Wang
> Sent: Wednesday, May 13, 2020 4:33 AM
> To: dev@dpdk.org
> Cc: Xing, Beilei <beilei.xing@intel.com>; Guo, Jia <jia.guo@intel.com>; Wang,
> ShougangX <shougangx.wang@intel.com>; stable@dpdk.org
> Subject: [dpdk-dev] [PATCH v3] net/i40e: fix queue region issue in RSS flow
>
> This patch fixes the issue that the queue region does not take effect due to
> incorrectly setting the flow type.
>
> Fixes: ecad87d22383 ("net/i40e: move RSS to flow API")
> Cc: stable@dpdk.org
>
> Signed-off-by: Shougang Wang <shougangx.wang@intel.com>
> Reviewed-by: Jeff Guo <jia.guo@intel.com>
> ---
> drivers/net/i40e/i40e_flow.c | 35 ++++++++++++++++++++++++++++++++-
> --
> 1 file changed, 32 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/i40e/i40e_flow.c b/drivers/net/i40e/i40e_flow.c
> index 7e64ae53a..2f937567b 100644
> --- a/drivers/net/i40e/i40e_flow.c
> +++ b/drivers/net/i40e/i40e_flow.c
> @@ -4625,6 +4625,34 @@ i40e_flow_parse_rss_action(struct rte_eth_dev
> *dev,
> uint32_t index = 0;
> uint64_t hf_bit = 1;
>
> + static const struct {
> + uint64_t rss_type;
> + enum i40e_filter_pctype pctype;
> + } pctype_match_table[] = {
> + {ETH_RSS_FRAG_IPV4,
> + I40E_FILTER_PCTYPE_FRAG_IPV4},
> + {ETH_RSS_NONFRAG_IPV4_TCP,
> + I40E_FILTER_PCTYPE_NONF_IPV4_TCP},
> + {ETH_RSS_NONFRAG_IPV4_UDP,
> + I40E_FILTER_PCTYPE_NONF_IPV4_UDP},
> + {ETH_RSS_NONFRAG_IPV4_SCTP,
> + I40E_FILTER_PCTYPE_NONF_IPV4_SCTP},
> + {ETH_RSS_NONFRAG_IPV4_OTHER,
> + I40E_FILTER_PCTYPE_NONF_IPV4_OTHER},
> + {ETH_RSS_FRAG_IPV6,
> + I40E_FILTER_PCTYPE_FRAG_IPV6},
> + {ETH_RSS_NONFRAG_IPV6_TCP,
> + I40E_FILTER_PCTYPE_NONF_IPV6_TCP},
> + {ETH_RSS_NONFRAG_IPV6_UDP,
> + I40E_FILTER_PCTYPE_NONF_IPV6_UDP},
> + {ETH_RSS_NONFRAG_IPV6_SCTP,
> + I40E_FILTER_PCTYPE_NONF_IPV6_SCTP},
> + {ETH_RSS_NONFRAG_IPV6_OTHER,
> + I40E_FILTER_PCTYPE_NONF_IPV6_OTHER},
> + {ETH_RSS_L2_PAYLOAD,
> + I40E_FILTER_PCTYPE_L2_PAYLOAD},
> + };
I don't think this is a complete list of RSS offload types.
See file librte_ethdev/rte_ethdev,h lines 496 to 523.
See also app/test-pmd/config.c lines 77 to 121.
> +
> NEXT_ITEM_OF_ACTION(act, actions, index);
> rss = act->conf;
>
> @@ -4641,9 +4669,10 @@ i40e_flow_parse_rss_action(struct rte_eth_dev
> *dev,
> }
>
> if (p_info.action_flag) {
> - for (n = 0; n < 64; n++) {
> - if (rss->types & (hf_bit << n)) {
> - conf_info->region[0].hw_flowtype[0] = n;
> + for (j = 0; j < RTE_DIM(pctype_match_table); j++) {
> + if (rss->types & pctype_match_table[j].rss_type) {
> + conf_info->region[0].hw_flowtype[0] =
> +
> (uint8_t)pctype_match_table[j].pctype;
> conf_info->region[0].flowtype_num = 1;
> conf_info->queue_region_number = 1;
> break;
> --
> 2.17.1
Regards,
Bernard.
Hi, Bernad
> -----Original Message-----
> From: Iremonger, Bernard <bernard.iremonger@intel.com>
> Sent: Wednesday, May 13, 2020 6:12 PM
> To: Wang, ShougangX <shougangx.wang@intel.com>; dev@dpdk.org
> Cc: Xing, Beilei <beilei.xing@intel.com>; Guo, Jia <jia.guo@intel.com>; Wang,
> ShougangX <shougangx.wang@intel.com>; stable@dpdk.org
> Subject: RE: [dpdk-dev] [PATCH v3] net/i40e: fix queue region issue in RSS
> flow
>
> Hi Shougang,
>
> > -----Original Message-----
> > From: dev <dev-bounces@dpdk.org> On Behalf Of Shougang Wang
> > Sent: Wednesday, May 13, 2020 4:33 AM
> > To: dev@dpdk.org
> > Cc: Xing, Beilei <beilei.xing@intel.com>; Guo, Jia
> > <jia.guo@intel.com>; Wang, ShougangX <shougangx.wang@intel.com>;
> > stable@dpdk.org
> > Subject: [dpdk-dev] [PATCH v3] net/i40e: fix queue region issue in RSS
> > flow
> >
> > This patch fixes the issue that the queue region does not take effect
> > due to incorrectly setting the flow type.
> >
> > Fixes: ecad87d22383 ("net/i40e: move RSS to flow API")
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: Shougang Wang <shougangx.wang@intel.com>
> > Reviewed-by: Jeff Guo <jia.guo@intel.com>
> > ---
> > drivers/net/i40e/i40e_flow.c | 35
> ++++++++++++++++++++++++++++++++-
> > --
> > 1 file changed, 32 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/net/i40e/i40e_flow.c
> > b/drivers/net/i40e/i40e_flow.c index 7e64ae53a..2f937567b 100644
> > --- a/drivers/net/i40e/i40e_flow.c
> > +++ b/drivers/net/i40e/i40e_flow.c
> > @@ -4625,6 +4625,34 @@ i40e_flow_parse_rss_action(struct rte_eth_dev
> > *dev, uint32_t index = 0; uint64_t hf_bit = 1;
> >
> > +static const struct {
> > +uint64_t rss_type;
> > +enum i40e_filter_pctype pctype;
> > +} pctype_match_table[] = {
> > +{ETH_RSS_FRAG_IPV4,
> > +I40E_FILTER_PCTYPE_FRAG_IPV4},
> > +{ETH_RSS_NONFRAG_IPV4_TCP,
> > +I40E_FILTER_PCTYPE_NONF_IPV4_TCP},
> > +{ETH_RSS_NONFRAG_IPV4_UDP,
> > +I40E_FILTER_PCTYPE_NONF_IPV4_UDP},
> > +{ETH_RSS_NONFRAG_IPV4_SCTP,
> > +I40E_FILTER_PCTYPE_NONF_IPV4_SCTP},
> > +{ETH_RSS_NONFRAG_IPV4_OTHER,
> > +I40E_FILTER_PCTYPE_NONF_IPV4_OTHER},
> > +{ETH_RSS_FRAG_IPV6,
> > +I40E_FILTER_PCTYPE_FRAG_IPV6},
> > +{ETH_RSS_NONFRAG_IPV6_TCP,
> > +I40E_FILTER_PCTYPE_NONF_IPV6_TCP},
> > +{ETH_RSS_NONFRAG_IPV6_UDP,
> > +I40E_FILTER_PCTYPE_NONF_IPV6_UDP},
> > +{ETH_RSS_NONFRAG_IPV6_SCTP,
> > +I40E_FILTER_PCTYPE_NONF_IPV6_SCTP},
> > +{ETH_RSS_NONFRAG_IPV6_OTHER,
> > +I40E_FILTER_PCTYPE_NONF_IPV6_OTHER},
> > +{ETH_RSS_L2_PAYLOAD,
> > +I40E_FILTER_PCTYPE_L2_PAYLOAD},
> > +};
>
> I don't think this is a complete list of RSS offload types.
> See file librte_ethdev/rte_ethdev,h lines 496 to 523.
> See also app/test-pmd/config.c lines 77 to 121.
>
Thanks for your review.
We can not contain all the RSS offload types. We need i40e_filter_pctype to configure the queue region. It only defines some basic pctypes and there is no regular between i40e_filter_pctype and RSS offload types. So for "flow create", it can only configure queue region for these basic pctypes. What we can do is associate them with RSS offload types.
Thanks.
Shougang
Tested-by: Xu, Hailin <hailinx.xu@intel.com>
Regards,
Xu, Hailin
-----Original Message-----
From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Wang, ShougangX
Sent: Thursday, May 14, 2020 3:04 PM
To: Iremonger, Bernard <bernard.iremonger@intel.com>; dev@dpdk.org
Cc: Xing, Beilei <beilei.xing@intel.com>; Guo, Jia <jia.guo@intel.com>; stable@dpdk.org
Subject: Re: [dpdk-dev] [PATCH v3] net/i40e: fix queue region issue in RSS flow
Hi, Bernad
> -----Original Message-----
> From: Iremonger, Bernard <bernard.iremonger@intel.com>
> Sent: Wednesday, May 13, 2020 6:12 PM
> To: Wang, ShougangX <shougangx.wang@intel.com>; dev@dpdk.org
> Cc: Xing, Beilei <beilei.xing@intel.com>; Guo, Jia
> <jia.guo@intel.com>; Wang, ShougangX <shougangx.wang@intel.com>;
> stable@dpdk.org
> Subject: RE: [dpdk-dev] [PATCH v3] net/i40e: fix queue region issue in
> RSS flow
>
> Hi Shougang,
>
> > -----Original Message-----
> > From: dev <dev-bounces@dpdk.org> On Behalf Of Shougang Wang
> > Sent: Wednesday, May 13, 2020 4:33 AM
> > To: dev@dpdk.org
> > Cc: Xing, Beilei <beilei.xing@intel.com>; Guo, Jia
> > <jia.guo@intel.com>; Wang, ShougangX <shougangx.wang@intel.com>;
> > stable@dpdk.org
> > Subject: [dpdk-dev] [PATCH v3] net/i40e: fix queue region issue in
> > RSS flow
> >
> > This patch fixes the issue that the queue region does not take
> > effect due to incorrectly setting the flow type.
> >
> > Fixes: ecad87d22383 ("net/i40e: move RSS to flow API")
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: Shougang Wang <shougangx.wang@intel.com>
> > Reviewed-by: Jeff Guo <jia.guo@intel.com>
> > ---
> > drivers/net/i40e/i40e_flow.c | 35
> ++++++++++++++++++++++++++++++++-
> > --
> > 1 file changed, 32 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/net/i40e/i40e_flow.c
> > b/drivers/net/i40e/i40e_flow.c index 7e64ae53a..2f937567b 100644
> > --- a/drivers/net/i40e/i40e_flow.c
> > +++ b/drivers/net/i40e/i40e_flow.c
> > @@ -4625,6 +4625,34 @@ i40e_flow_parse_rss_action(struct rte_eth_dev
> > *dev, uint32_t index = 0; uint64_t hf_bit = 1;
> >
> > +static const struct {
> > +uint64_t rss_type;
> > +enum i40e_filter_pctype pctype;
> > +} pctype_match_table[] = {
> > +{ETH_RSS_FRAG_IPV4,
> > +I40E_FILTER_PCTYPE_FRAG_IPV4},
> > +{ETH_RSS_NONFRAG_IPV4_TCP,
> > +I40E_FILTER_PCTYPE_NONF_IPV4_TCP},
> > +{ETH_RSS_NONFRAG_IPV4_UDP,
> > +I40E_FILTER_PCTYPE_NONF_IPV4_UDP},
> > +{ETH_RSS_NONFRAG_IPV4_SCTP,
> > +I40E_FILTER_PCTYPE_NONF_IPV4_SCTP},
> > +{ETH_RSS_NONFRAG_IPV4_OTHER,
> > +I40E_FILTER_PCTYPE_NONF_IPV4_OTHER},
> > +{ETH_RSS_FRAG_IPV6,
> > +I40E_FILTER_PCTYPE_FRAG_IPV6},
> > +{ETH_RSS_NONFRAG_IPV6_TCP,
> > +I40E_FILTER_PCTYPE_NONF_IPV6_TCP},
> > +{ETH_RSS_NONFRAG_IPV6_UDP,
> > +I40E_FILTER_PCTYPE_NONF_IPV6_UDP},
> > +{ETH_RSS_NONFRAG_IPV6_SCTP,
> > +I40E_FILTER_PCTYPE_NONF_IPV6_SCTP},
> > +{ETH_RSS_NONFRAG_IPV6_OTHER,
> > +I40E_FILTER_PCTYPE_NONF_IPV6_OTHER},
> > +{ETH_RSS_L2_PAYLOAD,
> > +I40E_FILTER_PCTYPE_L2_PAYLOAD},
> > +};
>
> I don't think this is a complete list of RSS offload types.
> See file librte_ethdev/rte_ethdev,h lines 496 to 523.
> See also app/test-pmd/config.c lines 77 to 121.
>
Thanks for your review.
We can not contain all the RSS offload types. We need i40e_filter_pctype to configure the queue region. It only defines some basic pctypes and there is no regular between i40e_filter_pctype and RSS offload types. So for "flow create", it can only configure queue region for these basic pctypes. What we can do is associate them with RSS offload types.
Thanks.
Shougang
Hi, shougang
> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Shougang Wang
> Sent: Wednesday, May 13, 2020 11:33 AM
> To: dev@dpdk.org
> Cc: Xing, Beilei <beilei.xing@intel.com>; Guo, Jia <jia.guo@intel.com>; Wang,
> ShougangX <shougangx.wang@intel.com>; stable@dpdk.org
> Subject: [dpdk-dev] [PATCH v3] net/i40e: fix queue region issue in RSS flow
>
> This patch fixes the issue that the queue region does not take effect due to
> incorrectly setting the flow type.
>
> Fixes: ecad87d22383 ("net/i40e: move RSS to flow API")
> Cc: stable@dpdk.org
>
> Signed-off-by: Shougang Wang <shougangx.wang@intel.com>
> Reviewed-by: Jeff Guo <jia.guo@intel.com>
> ---
> drivers/net/i40e/i40e_flow.c | 35 ++++++++++++++++++++++++++++++++---
> 1 file changed, 32 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/i40e/i40e_flow.c b/drivers/net/i40e/i40e_flow.c index
> 7e64ae53a..2f937567b 100644
> --- a/drivers/net/i40e/i40e_flow.c
> +++ b/drivers/net/i40e/i40e_flow.c
> @@ -4625,6 +4625,34 @@ i40e_flow_parse_rss_action(struct rte_eth_dev
> *dev,
> uint32_t index = 0;
> uint64_t hf_bit = 1;
>
> + static const struct {
> + uint64_t rss_type;
> + enum i40e_filter_pctype pctype;
> + } pctype_match_table[] = {
> + {ETH_RSS_FRAG_IPV4,
> + I40E_FILTER_PCTYPE_FRAG_IPV4},
> + {ETH_RSS_NONFRAG_IPV4_TCP,
> + I40E_FILTER_PCTYPE_NONF_IPV4_TCP},
> + {ETH_RSS_NONFRAG_IPV4_UDP,
> + I40E_FILTER_PCTYPE_NONF_IPV4_UDP},
> + {ETH_RSS_NONFRAG_IPV4_SCTP,
> + I40E_FILTER_PCTYPE_NONF_IPV4_SCTP},
> + {ETH_RSS_NONFRAG_IPV4_OTHER,
> + I40E_FILTER_PCTYPE_NONF_IPV4_OTHER},
> + {ETH_RSS_FRAG_IPV6,
> + I40E_FILTER_PCTYPE_FRAG_IPV6},
> + {ETH_RSS_NONFRAG_IPV6_TCP,
> + I40E_FILTER_PCTYPE_NONF_IPV6_TCP},
> + {ETH_RSS_NONFRAG_IPV6_UDP,
> + I40E_FILTER_PCTYPE_NONF_IPV6_UDP},
> + {ETH_RSS_NONFRAG_IPV6_SCTP,
> + I40E_FILTER_PCTYPE_NONF_IPV6_SCTP},
> + {ETH_RSS_NONFRAG_IPV6_OTHER,
> + I40E_FILTER_PCTYPE_NONF_IPV6_OTHER},
> + {ETH_RSS_L2_PAYLOAD,
> + I40E_FILTER_PCTYPE_L2_PAYLOAD},
> + };
> +
For x772, the pctype for UDP is different, this table should be different also.
if (hw->mac.type == I40E_MAC_X722)
..............................
Hi, Wei
> -----Original Message-----
> From: Zhao1, Wei <wei.zhao1@intel.com>
> Sent: Sunday, June 28, 2020 2:02 PM
> To: Wang, ShougangX <shougangx.wang@intel.com>; dev@dpdk.org
> Cc: Xing, Beilei <beilei.xing@intel.com>; Guo, Jia <jia.guo@intel.com>; Wang,
> ShougangX <shougangx.wang@intel.com>; stable@dpdk.org
> Subject: RE: [dpdk-dev] [PATCH v3] net/i40e: fix queue region issue in RSS
> flow
>
> Hi, shougang
>
[snip]
> > diff --git a/drivers/net/i40e/i40e_flow.c
> > b/drivers/net/i40e/i40e_flow.c index 7e64ae53a..2f937567b 100644
> > --- a/drivers/net/i40e/i40e_flow.c
> > +++ b/drivers/net/i40e/i40e_flow.c
> > @@ -4625,6 +4625,34 @@ i40e_flow_parse_rss_action(struct rte_eth_dev
> > *dev,
> > uint32_t index = 0;
> > uint64_t hf_bit = 1;
> >
> > + static const struct {
> > + uint64_t rss_type;
> > + enum i40e_filter_pctype pctype;
> > + } pctype_match_table[] = {
> > + {ETH_RSS_FRAG_IPV4,
> > + I40E_FILTER_PCTYPE_FRAG_IPV4},
> > + {ETH_RSS_NONFRAG_IPV4_TCP,
> > + I40E_FILTER_PCTYPE_NONF_IPV4_TCP},
> > + {ETH_RSS_NONFRAG_IPV4_UDP,
> > + I40E_FILTER_PCTYPE_NONF_IPV4_UDP},
> > + {ETH_RSS_NONFRAG_IPV4_SCTP,
> > + I40E_FILTER_PCTYPE_NONF_IPV4_SCTP},
> > + {ETH_RSS_NONFRAG_IPV4_OTHER,
> > + I40E_FILTER_PCTYPE_NONF_IPV4_OTHER},
> > + {ETH_RSS_FRAG_IPV6,
> > + I40E_FILTER_PCTYPE_FRAG_IPV6},
> > + {ETH_RSS_NONFRAG_IPV6_TCP,
> > + I40E_FILTER_PCTYPE_NONF_IPV6_TCP},
> > + {ETH_RSS_NONFRAG_IPV6_UDP,
> > + I40E_FILTER_PCTYPE_NONF_IPV6_UDP},
> > + {ETH_RSS_NONFRAG_IPV6_SCTP,
> > + I40E_FILTER_PCTYPE_NONF_IPV6_SCTP},
> > + {ETH_RSS_NONFRAG_IPV6_OTHER,
> > + I40E_FILTER_PCTYPE_NONF_IPV6_OTHER},
> > + {ETH_RSS_L2_PAYLOAD,
> > + I40E_FILTER_PCTYPE_L2_PAYLOAD},
> > + };
> > +
>
> For x772, the pctype for UDP is different, this table should be different also.
>
> if (hw->mac.type == I40E_MAC_X722)
> ..............................
Thanks for your review, I will perfect this table.
Thanks.
Shougang
@@ -4625,6 +4625,34 @@ i40e_flow_parse_rss_action(struct rte_eth_dev *dev,
uint32_t index = 0;
uint64_t hf_bit = 1;
+ static const struct {
+ uint64_t rss_type;
+ enum i40e_filter_pctype pctype;
+ } pctype_match_table[] = {
+ {ETH_RSS_FRAG_IPV4,
+ I40E_FILTER_PCTYPE_FRAG_IPV4},
+ {ETH_RSS_NONFRAG_IPV4_TCP,
+ I40E_FILTER_PCTYPE_NONF_IPV4_TCP},
+ {ETH_RSS_NONFRAG_IPV4_UDP,
+ I40E_FILTER_PCTYPE_NONF_IPV4_UDP},
+ {ETH_RSS_NONFRAG_IPV4_SCTP,
+ I40E_FILTER_PCTYPE_NONF_IPV4_SCTP},
+ {ETH_RSS_NONFRAG_IPV4_OTHER,
+ I40E_FILTER_PCTYPE_NONF_IPV4_OTHER},
+ {ETH_RSS_FRAG_IPV6,
+ I40E_FILTER_PCTYPE_FRAG_IPV6},
+ {ETH_RSS_NONFRAG_IPV6_TCP,
+ I40E_FILTER_PCTYPE_NONF_IPV6_TCP},
+ {ETH_RSS_NONFRAG_IPV6_UDP,
+ I40E_FILTER_PCTYPE_NONF_IPV6_UDP},
+ {ETH_RSS_NONFRAG_IPV6_SCTP,
+ I40E_FILTER_PCTYPE_NONF_IPV6_SCTP},
+ {ETH_RSS_NONFRAG_IPV6_OTHER,
+ I40E_FILTER_PCTYPE_NONF_IPV6_OTHER},
+ {ETH_RSS_L2_PAYLOAD,
+ I40E_FILTER_PCTYPE_L2_PAYLOAD},
+ };
+
NEXT_ITEM_OF_ACTION(act, actions, index);
rss = act->conf;
@@ -4641,9 +4669,10 @@ i40e_flow_parse_rss_action(struct rte_eth_dev *dev,
}
if (p_info.action_flag) {
- for (n = 0; n < 64; n++) {
- if (rss->types & (hf_bit << n)) {
- conf_info->region[0].hw_flowtype[0] = n;
+ for (j = 0; j < RTE_DIM(pctype_match_table); j++) {
+ if (rss->types & pctype_match_table[j].rss_type) {
+ conf_info->region[0].hw_flowtype[0] =
+ (uint8_t)pctype_match_table[j].pctype;
conf_info->region[0].flowtype_num = 1;
conf_info->queue_region_number = 1;
break;