[v2] net/ixgbe: fix tunnel type set error for FDIR

Message ID 1528877502-5076-1-git-send-email-wei.zhao1@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Qi Zhang
Headers
Series [v2] net/ixgbe: fix tunnel type set error for FDIR |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation fail apply issues

Commit Message

Zhao1, Wei June 13, 2018, 8:11 a.m. UTC
  Tunnel type format should be translated to ixgbe required format
before register set in FDIR cloud mode, Ans also some register
not useful in cloud mode but only useful in IP mode should be set
to zero as datasheet request.

Fixes: 82fb702077f6 ("ixgbe: support new flow director modes for X550")
Fixes: 11777435c727 ("net/ixgbe: parse flow director filter")

Signed-off-by: Wei Zhao <wei.zhao1@intel.com>
---

v2:
-change register write function for FDIRIPSA and FDIRIPDA.

---
 drivers/net/ixgbe/ixgbe_fdir.c | 17 +++++++++++++----
 drivers/net/ixgbe/ixgbe_flow.c |  6 ++----
 2 files changed, 15 insertions(+), 8 deletions(-)
  

Comments

Wenzhuo Lu June 14, 2018, 12:41 a.m. UTC | #1
Hi Wei,


> -----Original Message-----
> From: Zhao1, Wei
> Sent: Wednesday, June 13, 2018 4:12 PM
> To: dev@dpdk.org
> Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; stable@dpdk.org; Zhao1, Wei
> <wei.zhao1@intel.com>
> Subject: [PATCH v2] net/ixgbe: fix tunnel type set error for FDIR
> 
> Tunnel type format should be translated to ixgbe required format before
> register set in FDIR cloud mode, Ans also some register not useful in cloud
> mode but only useful in IP mode should be set to zero as datasheet request.
> 
> Fixes: 82fb702077f6 ("ixgbe: support new flow director modes for X550")
> Fixes: 11777435c727 ("net/ixgbe: parse flow director filter")
> 
> Signed-off-by: Wei Zhao <wei.zhao1@intel.com>
> ---
> 
> v2:
> -change register write function for FDIRIPSA and FDIRIPDA.
> 
> ---
>  drivers/net/ixgbe/ixgbe_fdir.c | 17 +++++++++++++----
> drivers/net/ixgbe/ixgbe_flow.c |  6 ++----
>  2 files changed, 15 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/net/ixgbe/ixgbe_fdir.c b/drivers/net/ixgbe/ixgbe_fdir.c
> index 67ab627..3feb815 100644
> --- a/drivers/net/ixgbe/ixgbe_fdir.c
> +++ b/drivers/net/ixgbe/ixgbe_fdir.c
> @@ -771,8 +771,15 @@ ixgbe_fdir_filter_to_atr_input(const struct
> rte_eth_fdir_filter *fdir_filter,
>  			input->formatted.inner_mac,
>  			fdir_filter-
> >input.flow.tunnel_flow.mac_addr.addr_bytes,
>  			sizeof(input->formatted.inner_mac));
> -		input->formatted.tunnel_type =
> -			fdir_filter->input.flow.tunnel_flow.tunnel_type;
> +		if (fdir_filter->input.flow.tunnel_flow.tunnel_type ==
> +				RTE_FDIR_TUNNEL_TYPE_VXLAN)
> +			input->formatted.tunnel_type = 0x8000;
> +		else if (fdir_filter->input.flow.tunnel_flow.tunnel_type ==
> +				RTE_FDIR_TUNNEL_TYPE_NVGRE)
> +			input->formatted.tunnel_type = 0;
Better use macros for 0x8000 and 0. And add comments why these values are used.
  
Zhao1, Wei June 14, 2018, 1:51 a.m. UTC | #2
Hi,

> -----Original Message-----
> From: Lu, Wenzhuo
> Sent: Thursday, June 14, 2018 8:42 AM
> To: Zhao1, Wei <wei.zhao1@intel.com>; dev@dpdk.org
> Cc: stable@dpdk.org
> Subject: RE: [PATCH v2] net/ixgbe: fix tunnel type set error for FDIR
> 
> Hi Wei,
> 
> 
> > -----Original Message-----
> > From: Zhao1, Wei
> > Sent: Wednesday, June 13, 2018 4:12 PM
> > To: dev@dpdk.org
> > Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; stable@dpdk.org; Zhao1, Wei
> > <wei.zhao1@intel.com>
> > Subject: [PATCH v2] net/ixgbe: fix tunnel type set error for FDIR
> >
> > Tunnel type format should be translated to ixgbe required format
> > before register set in FDIR cloud mode, Ans also some register not
> > useful in cloud mode but only useful in IP mode should be set to zero as
> datasheet request.
> >
> > Fixes: 82fb702077f6 ("ixgbe: support new flow director modes for
> > X550")
> > Fixes: 11777435c727 ("net/ixgbe: parse flow director filter")
> >
> > Signed-off-by: Wei Zhao <wei.zhao1@intel.com>
> > ---
> >
> > v2:
> > -change register write function for FDIRIPSA and FDIRIPDA.
> >
> > ---
> >  drivers/net/ixgbe/ixgbe_fdir.c | 17 +++++++++++++----
> > drivers/net/ixgbe/ixgbe_flow.c |  6 ++----
> >  2 files changed, 15 insertions(+), 8 deletions(-)
> >
> > diff --git a/drivers/net/ixgbe/ixgbe_fdir.c
> > b/drivers/net/ixgbe/ixgbe_fdir.c index 67ab627..3feb815 100644
> > --- a/drivers/net/ixgbe/ixgbe_fdir.c
> > +++ b/drivers/net/ixgbe/ixgbe_fdir.c
> > @@ -771,8 +771,15 @@ ixgbe_fdir_filter_to_atr_input(const struct
> > rte_eth_fdir_filter *fdir_filter,
> >  			input->formatted.inner_mac,
> >  			fdir_filter-
> > >input.flow.tunnel_flow.mac_addr.addr_bytes,
> >  			sizeof(input->formatted.inner_mac));
> > -		input->formatted.tunnel_type =
> > -			fdir_filter->input.flow.tunnel_flow.tunnel_type;
> > +		if (fdir_filter->input.flow.tunnel_flow.tunnel_type ==
> > +				RTE_FDIR_TUNNEL_TYPE_VXLAN)
> > +			input->formatted.tunnel_type = 0x8000;
> > +		else if (fdir_filter->input.flow.tunnel_flow.tunnel_type ==
> > +				RTE_FDIR_TUNNEL_TYPE_NVGRE)
> > +			input->formatted.tunnel_type = 0;
> Better use macros for 0x8000 and 0. And add comments why these values
> are used.

Ok, I will add some comment.
  

Patch

diff --git a/drivers/net/ixgbe/ixgbe_fdir.c b/drivers/net/ixgbe/ixgbe_fdir.c
index 67ab627..3feb815 100644
--- a/drivers/net/ixgbe/ixgbe_fdir.c
+++ b/drivers/net/ixgbe/ixgbe_fdir.c
@@ -771,8 +771,15 @@  ixgbe_fdir_filter_to_atr_input(const struct rte_eth_fdir_filter *fdir_filter,
 			input->formatted.inner_mac,
 			fdir_filter->input.flow.tunnel_flow.mac_addr.addr_bytes,
 			sizeof(input->formatted.inner_mac));
-		input->formatted.tunnel_type =
-			fdir_filter->input.flow.tunnel_flow.tunnel_type;
+		if (fdir_filter->input.flow.tunnel_flow.tunnel_type ==
+				RTE_FDIR_TUNNEL_TYPE_VXLAN)
+			input->formatted.tunnel_type = 0x8000;
+		else if (fdir_filter->input.flow.tunnel_flow.tunnel_type ==
+				RTE_FDIR_TUNNEL_TYPE_NVGRE)
+			input->formatted.tunnel_type = 0;
+		else
+			PMD_DRV_LOG(ERR, " invalid tunnel type arguments.");
+
 		input->formatted.tni_vni =
 			fdir_filter->input.flow.tunnel_flow.tunnel_id >> 8;
 	}
@@ -1001,8 +1008,7 @@  fdir_write_perfect_filter_82599(struct ixgbe_hw *hw,
 			IXGBE_WRITE_REG(hw, IXGBE_FDIRSIPv6(2), 0);
 		} else {
 			/* tunnel mode */
-			if (input->formatted.tunnel_type !=
-				RTE_FDIR_TUNNEL_TYPE_NVGRE)
+			if (input->formatted.tunnel_type)
 				tunnel_type = 0x80000000;
 			tunnel_type |= addr_high;
 			IXGBE_WRITE_REG(hw, IXGBE_FDIRSIPv6(0), addr_low);
@@ -1010,6 +1016,9 @@  fdir_write_perfect_filter_82599(struct ixgbe_hw *hw,
 			IXGBE_WRITE_REG(hw, IXGBE_FDIRSIPv6(2),
 					input->formatted.tni_vni);
 		}
+		IXGBE_WRITE_REG(hw, IXGBE_FDIRIPSA, 0);
+		IXGBE_WRITE_REG(hw, IXGBE_FDIRIPDA, 0);
+		IXGBE_WRITE_REG(hw, IXGBE_FDIRPORT, 0);
 	}
 
 	/* record vlan (little-endian) and flex_bytes(big-endian) */
diff --git a/drivers/net/ixgbe/ixgbe_flow.c b/drivers/net/ixgbe/ixgbe_flow.c
index f47f125..06bc2a7 100644
--- a/drivers/net/ixgbe/ixgbe_flow.c
+++ b/drivers/net/ixgbe/ixgbe_flow.c
@@ -2436,8 +2436,7 @@  ixgbe_parse_fdir_filter_tunnel(const struct rte_flow_attr *attr,
 
 	/* Get the VxLAN info */
 	if (item->type == RTE_FLOW_ITEM_TYPE_VXLAN) {
-		rule->ixgbe_fdir.formatted.tunnel_type =
-			RTE_FDIR_TUNNEL_TYPE_VXLAN;
+		rule->ixgbe_fdir.formatted.tunnel_type = 0x8000;
 
 		/* Only care about VNI, others should be masked. */
 		if (!item->mask) {
@@ -2494,8 +2493,7 @@  ixgbe_parse_fdir_filter_tunnel(const struct rte_flow_attr *attr,
 
 	/* Get the NVGRE info */
 	if (item->type == RTE_FLOW_ITEM_TYPE_NVGRE) {
-		rule->ixgbe_fdir.formatted.tunnel_type =
-			RTE_FDIR_TUNNEL_TYPE_NVGRE;
+		rule->ixgbe_fdir.formatted.tunnel_type = 0;
 
 		/**
 		 * Only care about flags0, flags1, protocol and TNI,