[v3] net/i40e: fix queue region issue in RSS flow

Message ID 20200513033320.15771-1-shougangx.wang@intel.com (mailing list archive)
State Superseded, archived
Delegated to: xiaolong ye
Headers
Series [v3] net/i40e: fix queue region issue in RSS flow |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/travis-robot success Travis build: passed
ci/Intel-compilation success Compilation OK
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-nxp-Performance success Performance Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-testing fail Testing issues

Commit Message

Shougang Wang May 13, 2020, 3:33 a.m. UTC
  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

Cui, LunyuanX May 13, 2020, 8:31 a.m. UTC | #1
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
  
Iremonger, Bernard May 13, 2020, 10:11 a.m. UTC | #2
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.
  
Shougang Wang May 14, 2020, 7:04 a.m. UTC | #3
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
  
hailinx May 15, 2020, 6:14 a.m. UTC | #4
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
  
Zhao1, Wei June 28, 2020, 6:01 a.m. UTC | #5
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)
..............................
  
Shougang Wang June 28, 2020, 6:51 a.m. UTC | #6
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
  

Patch

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;