net/ixgbe: fix mask bits register set error for FDIR

Message ID 1528877530-5133-1-git-send-email-wei.zhao1@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Qi Zhang
Headers
Series net/ixgbe: fix mask bits register set error for FDIR |

Checks

Context Check Description
ci/Intel-compilation success Compilation OK

Commit Message

Zhao1, Wei June 13, 2018, 8:12 a.m. UTC
  MAC address bits in mask registers should be set to zero
when the is mac mask is 0xFF, otherwise if it is 0x0
these bits should be to 0x3F.

Fixes: 82fb702077f6 ("ixgbe: support new flow director modes for X550")

Signed-off-by: Wei Zhao <wei.zhao1@intel.com>
---
 drivers/net/ixgbe/ixgbe_fdir.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)
  

Comments

Wenzhuo Lu June 14, 2018, 12:52 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] net/ixgbe: fix mask bits register set error for FDIR
> 
> MAC address bits in mask registers should be set to zero when the is mac
> mask is 0xFF, otherwise if it is 0x0 these bits should be to 0x3F.
> 
> Fixes: 82fb702077f6 ("ixgbe: support new flow director modes for X550")
> 
> Signed-off-by: Wei Zhao <wei.zhao1@intel.com>
> ---
>  drivers/net/ixgbe/ixgbe_fdir.c | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/ixgbe/ixgbe_fdir.c b/drivers/net/ixgbe/ixgbe_fdir.c
> index 3feb815..6d97aa3 100644
> --- a/drivers/net/ixgbe/ixgbe_fdir.c
> +++ b/drivers/net/ixgbe/ixgbe_fdir.c
> @@ -394,9 +394,15 @@ fdir_set_input_mask_x550(struct rte_eth_dev *dev)
>  				IXGBE_FDIRIP6M_TNI_VNI;
> 
>  	if (mode == RTE_FDIR_MODE_PERFECT_TUNNEL) {
> -		mac_mask = info->mask.mac_addr_byte_mask;
> -		fdiripv6m |= (mac_mask <<
> IXGBE_FDIRIP6M_INNER_MAC_SHIFT)
> -				& IXGBE_FDIRIP6M_INNER_MAC;
> +		mac_mask = info->mask.mac_addr_byte_mask & 0x3F;
Better not use 0x3f, you can change it to "IXGBE_FDIRIP6M_INNER_MAC >> IXGBE_FDIRIP6M_INNER_MAC_SHIFT"

> +		if (mac_mask == 0x3F)
> +			fdiripv6m &= ~IXGBE_FDIRIP6M_INNER_MAC;
> +		else if (mac_mask == 0)
> +			fdiripv6m |= IXGBE_FDIRIP6M_INNER_MAC;
> +		else{
> +			PMD_INIT_LOG(ERR, "invalid mac_addr_byte_mask");
> +			return -EINVAL;
I think every byte of the MAC address can be masked. So this is not the invalid case. We should support 0x1f, 0xf, 0x7... as before.

> +		}
> 
>  		switch (info->mask.tunnel_type_mask) {
>  		case 0:
> --
> 2.7.5
  
Zhao1, Wei June 14, 2018, 1:52 a.m. UTC | #2
Hi, wenzhuo

> -----Original Message-----
> From: Lu, Wenzhuo
> Sent: Thursday, June 14, 2018 8:53 AM
> To: Zhao1, Wei <wei.zhao1@intel.com>; dev@dpdk.org
> Cc: stable@dpdk.org
> Subject: RE: [PATCH] net/ixgbe: fix mask bits register 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] net/ixgbe: fix mask bits register set error for FDIR
> >
> > MAC address bits in mask registers should be set to zero when the is
> > mac mask is 0xFF, otherwise if it is 0x0 these bits should be to 0x3F.
> >
> > Fixes: 82fb702077f6 ("ixgbe: support new flow director modes for
> > X550")
> >
> > Signed-off-by: Wei Zhao <wei.zhao1@intel.com>
> > ---
> >  drivers/net/ixgbe/ixgbe_fdir.c | 12 +++++++++---
> >  1 file changed, 9 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/net/ixgbe/ixgbe_fdir.c
> > b/drivers/net/ixgbe/ixgbe_fdir.c index 3feb815..6d97aa3 100644
> > --- a/drivers/net/ixgbe/ixgbe_fdir.c
> > +++ b/drivers/net/ixgbe/ixgbe_fdir.c
> > @@ -394,9 +394,15 @@ fdir_set_input_mask_x550(struct rte_eth_dev
> *dev)
> >  				IXGBE_FDIRIP6M_TNI_VNI;
> >
> >  	if (mode == RTE_FDIR_MODE_PERFECT_TUNNEL) {
> > -		mac_mask = info->mask.mac_addr_byte_mask;
> > -		fdiripv6m |= (mac_mask <<
> > IXGBE_FDIRIP6M_INNER_MAC_SHIFT)
> > -				& IXGBE_FDIRIP6M_INNER_MAC;
> > +		mac_mask = info->mask.mac_addr_byte_mask & 0x3F;
> Better not use 0x3f, you can change it to "IXGBE_FDIRIP6M_INNER_MAC >>
> IXGBE_FDIRIP6M_INNER_MAC_SHIFT"
> 
> > +		if (mac_mask == 0x3F)
> > +			fdiripv6m &= ~IXGBE_FDIRIP6M_INNER_MAC;
> > +		else if (mac_mask == 0)
> > +			fdiripv6m |= IXGBE_FDIRIP6M_INNER_MAC;
> > +		else{
> > +			PMD_INIT_LOG(ERR, "invalid
> mac_addr_byte_mask");
> > +			return -EINVAL;
> I think every byte of the MAC address can be masked. So this is not the
> invalid case. We should support 0x1f, 0xf, 0x7... as before.

Ok, I will commit v3
> 
> > +		}
> >
> >  		switch (info->mask.tunnel_type_mask) {
> >  		case 0:
> > --
> > 2.7.5
  

Patch

diff --git a/drivers/net/ixgbe/ixgbe_fdir.c b/drivers/net/ixgbe/ixgbe_fdir.c
index 3feb815..6d97aa3 100644
--- a/drivers/net/ixgbe/ixgbe_fdir.c
+++ b/drivers/net/ixgbe/ixgbe_fdir.c
@@ -394,9 +394,15 @@  fdir_set_input_mask_x550(struct rte_eth_dev *dev)
 				IXGBE_FDIRIP6M_TNI_VNI;
 
 	if (mode == RTE_FDIR_MODE_PERFECT_TUNNEL) {
-		mac_mask = info->mask.mac_addr_byte_mask;
-		fdiripv6m |= (mac_mask << IXGBE_FDIRIP6M_INNER_MAC_SHIFT)
-				& IXGBE_FDIRIP6M_INNER_MAC;
+		mac_mask = info->mask.mac_addr_byte_mask & 0x3F;
+		if (mac_mask == 0x3F)
+			fdiripv6m &= ~IXGBE_FDIRIP6M_INNER_MAC;
+		else if (mac_mask == 0)
+			fdiripv6m |= IXGBE_FDIRIP6M_INNER_MAC;
+		else{
+			PMD_INIT_LOG(ERR, "invalid mac_addr_byte_mask");
+			return -EINVAL;
+		}
 
 		switch (info->mask.tunnel_type_mask) {
 		case 0: