[dpdk-dev] i40evf: Ignore disabled HW CRC strip for Linux PF hosts

Message ID 1460645904-19565-1-git-send-email-bjorn.topel@intel.com (mailing list archive)
State Changes Requested, archived
Delegated to: Bruce Richardson
Headers

Commit Message

Björn Töpel April 14, 2016, 2:58 p.m. UTC
  On Linux PF hosts, the VF has no means of changing the HW CRC strip
setting for a RX queue. It's implicitly enabled.

This patch ignores, and warns, if HW CRC stripping was disabled.

Signed-off-by: Björn Töpel <bjorn.topel@intel.com>
---
 drivers/net/i40e/i40e_ethdev_vf.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
  

Comments

David Marchand April 15, 2016, 7:40 a.m. UTC | #1
CC maintainers.

On Thu, Apr 14, 2016 at 4:58 PM, Björn Töpel <bjorn.topel@intel.com> wrote:
> On Linux PF hosts, the VF has no means of changing the HW CRC strip
> setting for a RX queue. It's implicitly enabled.
>
> This patch ignores, and warns, if HW CRC stripping was disabled.
>
> Signed-off-by: Björn Töpel <bjorn.topel@intel.com>
> ---
>  drivers/net/i40e/i40e_ethdev_vf.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
>
> diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c
> index 2bce69b..f88eb79 100644
> --- a/drivers/net/i40e/i40e_ethdev_vf.c
> +++ b/drivers/net/i40e/i40e_ethdev_vf.c
> @@ -1567,6 +1567,8 @@ i40evf_dev_configure(struct rte_eth_dev *dev)
>  {
>         struct i40e_adapter *ad =
>                 I40E_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
> +       struct rte_eth_conf *conf = &dev->data->dev_conf;
> +       struct i40e_vf *vf;
>
>         /* Initialize to TRUE. If any of Rx queues doesn't meet the bulk
>          * allocation or vector Rx preconditions we will reset it.
> @@ -1576,6 +1578,19 @@ i40evf_dev_configure(struct rte_eth_dev *dev)
>         ad->tx_simple_allowed = true;
>         ad->tx_vec_allowed = true;
>
> +       /* For Linux PF hosts, VF has no ability to disable HW CRC strip,
> +        * and is implicitly enabled by the PF.
> +        */
> +       if (!conf->rxmode.hw_strip_crc) {
> +               vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);
> +               if ((vf->version_major == I40E_VIRTCHNL_VERSION_MAJOR) &&
> +                   (vf->version_minor <= I40E_VIRTCHNL_VERSION_MINOR)) {
> +                       /* Peer is Linux PF host. */
> +                       PMD_INIT_LOG(NOTICE, "VF can't disable HW CRC Strip.");
> +                       conf->rxmode.hw_strip_crc = 1;
> +               }
> +       }
> +
>         return i40evf_init_vlan(dev);
>  }

Not sure this is the right way to handle it.
The driver should return an error rather than silently discard what
the application asked.

>
> --
> 2.7.4
>
> ----------------------------------------------------------------------
> Intel Sweden AB
> Registered Office: Isafjordsgatan 30B, 164 40 Kista, Stockholm, Sweden
> Registration Number: 556189-6027
>
> This e-mail and any attachments may contain confidential material for
> the sole use of the intended recipient(s). Any review or distribution
> by others is strictly prohibited. If you are not the intended
> recipient, please contact the sender and delete all copies.

Please, remove this.
  
Zhang, Helin April 15, 2016, 8:07 a.m. UTC | #2
> -----Original Message-----

> From: David Marchand [mailto:david.marchand@6wind.com]

> Sent: Friday, April 15, 2016 3:41 PM

> To: Topel, Bjorn <bjorn.topel@intel.com>

> Cc: dev@dpdk.org; Zhang, Helin <helin.zhang@intel.com>; Wu, Jingjing

> <jingjing.wu@intel.com>

> Subject: Re: [dpdk-dev] [PATCH] i40evf: Ignore disabled HW CRC strip for Linux PF

> hosts

> 

> CC maintainers.

> 

> On Thu, Apr 14, 2016 at 4:58 PM, Björn Töpel <bjorn.topel@intel.com> wrote:

> > On Linux PF hosts, the VF has no means of changing the HW CRC strip

> > setting for a RX queue. It's implicitly enabled.

> >

> > This patch ignores, and warns, if HW CRC stripping was disabled.

> >

> > Signed-off-by: Björn Töpel <bjorn.topel@intel.com>

> > ---

> >  drivers/net/i40e/i40e_ethdev_vf.c | 15 +++++++++++++++

> >  1 file changed, 15 insertions(+)

> >

> > diff --git a/drivers/net/i40e/i40e_ethdev_vf.c

> > b/drivers/net/i40e/i40e_ethdev_vf.c

> > index 2bce69b..f88eb79 100644

> > --- a/drivers/net/i40e/i40e_ethdev_vf.c

> > +++ b/drivers/net/i40e/i40e_ethdev_vf.c

> > @@ -1567,6 +1567,8 @@ i40evf_dev_configure(struct rte_eth_dev *dev)  {

> >         struct i40e_adapter *ad =

> >

> I40E_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);

> > +       struct rte_eth_conf *conf = &dev->data->dev_conf;

> > +       struct i40e_vf *vf;

> >

> >         /* Initialize to TRUE. If any of Rx queues doesn't meet the bulk

> >          * allocation or vector Rx preconditions we will reset it.

> > @@ -1576,6 +1578,19 @@ i40evf_dev_configure(struct rte_eth_dev *dev)

> >         ad->tx_simple_allowed = true;

> >         ad->tx_vec_allowed = true;

> >

> > +       /* For Linux PF hosts, VF has no ability to disable HW CRC strip,

> > +        * and is implicitly enabled by the PF.

> > +        */

> > +       if (!conf->rxmode.hw_strip_crc) {

> > +               vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);

> > +               if ((vf->version_major == I40E_VIRTCHNL_VERSION_MAJOR)

> &&

> > +                   (vf->version_minor <=

> I40E_VIRTCHNL_VERSION_MINOR)) {

> > +                       /* Peer is Linux PF host. */

> > +                       PMD_INIT_LOG(NOTICE, "VF can't disable HW CRC

> Strip.");

> > +                       conf->rxmode.hw_strip_crc = 1;

> > +               }

> > +       }

> > +

> >         return i40evf_init_vlan(dev);

> >  }

> 

> Not sure this is the right way to handle it.

> The driver should return an error rather than silently discard what the application

> asked.

I also think it should return an error with checking if the host is kernel driver, and crc strip is disabled in VF.
Thank you David!

Regards,
Helin

> 

> >

> > --

> > 2.7.4

> >

> > ----------------------------------------------------------------------

> > Intel Sweden AB

> > Registered Office: Isafjordsgatan 30B, 164 40 Kista, Stockholm, Sweden

> > Registration Number: 556189-6027

> >

> > This e-mail and any attachments may contain confidential material for

> > the sole use of the intended recipient(s). Any review or distribution

> > by others is strictly prohibited. If you are not the intended

> > recipient, please contact the sender and delete all copies.

> 

> Please, remove this.

> 

> 

> --

> David Marchand
  
Björn Töpel April 18, 2016, 6:47 p.m. UTC | #3
>> Not sure this is the right way to handle it.  The driver should
>> return an error rather than silently discard what the
>> application asked.
>
> I also think it should return an error with checking if the
> host is kernel driver, and crc strip is disabled in VF.  Thank
> you David!

Thanks for reviewing my patch, Helin and David.

I agree that it's subtle to ignore the error, and just log the
error. This is how ixgbevf behaves (refer to
ixgbevf_dev_configure), so I figured that i40evf should behave
analogous.

I'll submit a v2 of the patch that returns an EINVAL and logs the
failure.

Would it make sense to change the ixgbevf_dev_configure as well,
in a separate patch?


>> ----------------------------------------------------------------------
>> Intel Sweden AB
>> Registered Office: Isafjordsgatan 30B, 164 40 Kista, Stockholm, Sweden
>> Registration Number: 556189-6027
>>
>> This e-mail and any attachments may contain confidential material for
>> the sole use of the intended recipient(s). Any review or distribution
>> by others is strictly prohibited. If you are not the intended
>> recipient, please contact the sender and delete all copies.
>
> Please, remove this.

Noted. Will make sure to fix that for future revisions. Thanks!


Björn
----------------------------------------------------------------------
Intel Sweden AB
Registered Office: Isafjordsgatan 30B, 164 40 Kista, Stockholm, Sweden
Registration Number: 556189-6027

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.
  
Zhang, Helin April 19, 2016, 2:31 a.m. UTC | #4
> -----Original Message-----
> From: Topel, Bjorn
> Sent: Tuesday, April 19, 2016 2:47 AM
> To: Zhang, Helin <helin.zhang@intel.com>; David Marchand
> <david.marchand@6wind.com>
> Cc: dev@dpdk.org; Wu, Jingjing <jingjing.wu@intel.com>
> Subject: RE: [dpdk-dev] [PATCH] i40evf: Ignore disabled HW CRC strip for Linux PF
> hosts
> 
> >> Not sure this is the right way to handle it.  The driver should
> >> return an error rather than silently discard what the application
> >> asked.
> >
> > I also think it should return an error with checking if the host is
> > kernel driver, and crc strip is disabled in VF.  Thank you David!
> 
> Thanks for reviewing my patch, Helin and David.
> 
> I agree that it's subtle to ignore the error, and just log the error. This is how
> ixgbevf behaves (refer to ixgbevf_dev_configure), so I figured that i40evf should
> behave analogous.
> 
> I'll submit a v2 of the patch that returns an EINVAL and logs the failure.
> 
> Would it make sense to change the ixgbevf_dev_configure as well, in a separate
> patch?
Yes, I agree with you that ixgbe and i40e should be consistent. Thank you!

/Helin

> 
> 
> >> ---------------------------------------------------------------------
> >> -
> >> Intel Sweden AB
> >> Registered Office: Isafjordsgatan 30B, 164 40 Kista, Stockholm,
> >> Sweden Registration Number: 556189-6027
> >>
> >> This e-mail and any attachments may contain confidential material for
> >> the sole use of the intended recipient(s). Any review or distribution
> >> by others is strictly prohibited. If you are not the intended
> >> recipient, please contact the sender and delete all copies.
> >
> > Please, remove this.
> 
> Noted. Will make sure to fix that for future revisions. Thanks!
> 
> 
> Björn
  

Patch

diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c
index 2bce69b..f88eb79 100644
--- a/drivers/net/i40e/i40e_ethdev_vf.c
+++ b/drivers/net/i40e/i40e_ethdev_vf.c
@@ -1567,6 +1567,8 @@  i40evf_dev_configure(struct rte_eth_dev *dev)
 {
 	struct i40e_adapter *ad =
 		I40E_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
+	struct rte_eth_conf *conf = &dev->data->dev_conf;
+	struct i40e_vf *vf;
 
 	/* Initialize to TRUE. If any of Rx queues doesn't meet the bulk
 	 * allocation or vector Rx preconditions we will reset it.
@@ -1576,6 +1578,19 @@  i40evf_dev_configure(struct rte_eth_dev *dev)
 	ad->tx_simple_allowed = true;
 	ad->tx_vec_allowed = true;
 
+	/* For Linux PF hosts, VF has no ability to disable HW CRC strip,
+	 * and is implicitly enabled by the PF.
+	 */
+	if (!conf->rxmode.hw_strip_crc) {
+		vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);
+		if ((vf->version_major == I40E_VIRTCHNL_VERSION_MAJOR) &&
+		    (vf->version_minor <= I40E_VIRTCHNL_VERSION_MINOR)) {
+			/* Peer is Linux PF host. */
+			PMD_INIT_LOG(NOTICE, "VF can't disable HW CRC Strip.");
+			conf->rxmode.hw_strip_crc = 1;
+		}
+	}
+
 	return i40evf_init_vlan(dev);
 }