[dpdk-dev,v2,2/2] ethdev: add new offload flag to keep CRC

Message ID 20180321194730.52068-2-ferruh.yigit@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Ferruh Yigit
Headers

Checks

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

Commit Message

Ferruh Yigit March 21, 2018, 7:47 p.m. UTC
  DEV_RX_OFFLOAD_KEEP_CRC offload flag added.

DEV_RX_OFFLOAD_CRC_STRIP flag will remain one more release but default
behavior in PMDs is to strip the CRC independent from this flag.

Until DEV_RX_OFFLOAD_CRC_STRIP flag is removed:
- Setting both KEEP_CRC & CRC_STRIP is INVALID
- Setting only CRC_STRIP PMD should strip the CRC
- Setting only KEEP_CRC PMD should keep the CRC
- Not setting both PMD should strip the CRC

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
 lib/librte_ether/rte_ethdev.h | 3 +++
 1 file changed, 3 insertions(+)
  

Comments

Thomas Monjalon March 21, 2018, 9:05 p.m. UTC | #1
21/03/2018 20:47, Ferruh Yigit:
> DEV_RX_OFFLOAD_KEEP_CRC offload flag added.
> 
> DEV_RX_OFFLOAD_CRC_STRIP flag will remain one more release but default
> behavior in PMDs is to strip the CRC independent from this flag.
> 
> Until DEV_RX_OFFLOAD_CRC_STRIP flag is removed:
> - Setting both KEEP_CRC & CRC_STRIP is INVALID
> - Setting only CRC_STRIP PMD should strip the CRC
> - Setting only KEEP_CRC PMD should keep the CRC
> - Not setting both PMD should strip the CRC

It is the same as saying that DEV_RX_OFFLOAD_CRC_STRIP has no effect :)
  
Shahaf Shuler March 29, 2018, 5:38 a.m. UTC | #2
Wednesday, March 21, 2018 9:48 PM, Ferruh Yigit:
> DEV_RX_OFFLOAD_KEEP_CRC offload flag added.
> 
> DEV_RX_OFFLOAD_CRC_STRIP flag will remain one more release but default
> behavior in PMDs is to strip the CRC independent from this flag.
> 
> Until DEV_RX_OFFLOAD_CRC_STRIP flag is removed:
> - Setting both KEEP_CRC & CRC_STRIP is INVALID
> - Setting only CRC_STRIP PMD should strip the CRC
> - Setting only KEEP_CRC PMD should keep the CRC
> - Not setting both PMD should strip the CRC

We cannot have such default behavior, it may break existing applications.

The API of ethdev offloads says (even though it is not well documented) :  DEV_RX_OFFLOAD_CRC_STRIP (emphasis the STRIP). 
meaning, if set -> STRIP, if not set -> don't strip.  I am aware to at least one application which wants to have the CRC, and for that purpose it naturally don't set the offload flag. 

The fact some PMDs lack the ability to toggle the CRC stripping should be exposed in the "limitations" section of their related guide. 

Up to here, this is the behavior as defined by the API. 

Now, we want to change it, and I think it makes sense. However I think we should take similar approach to what we did with the ethdev offloads API:
1. at first stage a new offload flag is exposed DEV_RX_OFFLOAD_KEEP_CRC and implemented on the PMDs. 
2. there is a conversion function on ethdev. Which for example converts ~DEV_RX_OFFLOAD_CRC_STRIP -> DEV_RX_OFFLOAD_KEEP_CRC for the PMDs.
3. deprecation of DEV_RX_OFFLOAD_CRC_STRIP for applications and remove of the conversion functions. 

More below,

> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> ---
>  lib/librte_ether/rte_ethdev.h | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
> index 5e13dca6a..ab1030d42 100644
> --- a/lib/librte_ether/rte_ethdev.h
> +++ b/lib/librte_ether/rte_ethdev.h
> @@ -939,6 +939,9 @@ struct rte_eth_conf {
>  #define DEV_RX_OFFLOAD_SCATTER		0x00002000
>  #define DEV_RX_OFFLOAD_TIMESTAMP	0x00004000
>  #define DEV_RX_OFFLOAD_SECURITY         0x00008000
> +/* Invalid to set both DEV_RX_OFFLOAD_CRC_STRIP and
> +DEV_RX_OFFLOAD_KEEP_CRC
> + * No DEV_RX_OFFLOAD_CRC_STRIP flag means stripping CRC */
> +#define DEV_RX_OFFLOAD_KEEP_CRC		0x00010000

Need also comment on DEV_RX_OFFLOAD_CRC_STRIP to say it is deprecated.

>  #define DEV_RX_OFFLOAD_CHECKSUM (DEV_RX_OFFLOAD_IPV4_CKSUM |
> \
>  				 DEV_RX_OFFLOAD_UDP_CKSUM | \
>  				 DEV_RX_OFFLOAD_TCP_CKSUM)
> --
> 2.13.6
  
Thomas Monjalon March 29, 2018, 7:43 a.m. UTC | #3
29/03/2018 07:38, Shahaf Shuler:
> Wednesday, March 21, 2018 9:48 PM, Ferruh Yigit:
> > DEV_RX_OFFLOAD_KEEP_CRC offload flag added.
> > 
> > DEV_RX_OFFLOAD_CRC_STRIP flag will remain one more release but default
> > behavior in PMDs is to strip the CRC independent from this flag.
> > 
> > Until DEV_RX_OFFLOAD_CRC_STRIP flag is removed:
> > - Setting both KEEP_CRC & CRC_STRIP is INVALID
> > - Setting only CRC_STRIP PMD should strip the CRC
> > - Setting only KEEP_CRC PMD should keep the CRC
> > - Not setting both PMD should strip the CRC
> 
> We cannot have such default behavior, it may break existing applications.
> 
> The API of ethdev offloads says (even though it is not well documented) :  DEV_RX_OFFLOAD_CRC_STRIP (emphasis the STRIP). 
> meaning, if set -> STRIP, if not set -> don't strip.  I am aware to at least one application which wants to have the CRC, and for that purpose it naturally don't set the offload flag. 
> 
> The fact some PMDs lack the ability to toggle the CRC stripping should be exposed in the "limitations" section of their related guide. 
> 
> Up to here, this is the behavior as defined by the API. 
> 
> Now, we want to change it, and I think it makes sense. However I think we should take similar approach to what we did with the ethdev offloads API:
> 1. at first stage a new offload flag is exposed DEV_RX_OFFLOAD_KEEP_CRC and implemented on the PMDs.

This is what is proposed above, except that we change the default behaviour.
If we introduce a new flag which is the contrary of the old one, we need
to choose which one is the default, so which one has no effect.

> 2. there is a conversion function on ethdev. Which for example converts ~DEV_RX_OFFLOAD_CRC_STRIP -> DEV_RX_OFFLOAD_KEEP_CRC for the PMDs.
> 3. deprecation of DEV_RX_OFFLOAD_CRC_STRIP for applications and remove of the conversion functions.
  
Shahaf Shuler March 29, 2018, 7:56 a.m. UTC | #4
Thursday, March 29, 2018 10:43 AM, Thomas Monjalon:
> 29/03/2018 07:38, Shahaf Shuler:
> > Wednesday, March 21, 2018 9:48 PM, Ferruh Yigit:
> > > DEV_RX_OFFLOAD_KEEP_CRC offload flag added.
> > >
> > > DEV_RX_OFFLOAD_CRC_STRIP flag will remain one more release but
> > > default behavior in PMDs is to strip the CRC independent from this flag.
> > >
> > > Until DEV_RX_OFFLOAD_CRC_STRIP flag is removed:
> > > - Setting both KEEP_CRC & CRC_STRIP is INVALID
> > > - Setting only CRC_STRIP PMD should strip the CRC
> > > - Setting only KEEP_CRC PMD should keep the CRC
> > > - Not setting both PMD should strip the CRC
> >
> > We cannot have such default behavior, it may break existing applications.
> >
> > The API of ethdev offloads says (even though it is not well documented) :
> DEV_RX_OFFLOAD_CRC_STRIP (emphasis the STRIP).
> > meaning, if set -> STRIP, if not set -> don't strip.  I am aware to at least one
> application which wants to have the CRC, and for that purpose it naturally
> don't set the offload flag.
> >
> > The fact some PMDs lack the ability to toggle the CRC stripping should be
> exposed in the "limitations" section of their related guide.
> >
> > Up to here, this is the behavior as defined by the API.
> >
> > Now, we want to change it, and I think it makes sense. However I think we
> should take similar approach to what we did with the ethdev offloads API:
> > 1. at first stage a new offload flag is exposed DEV_RX_OFFLOAD_KEEP_CRC
> and implemented on the PMDs.
> 
> This is what is proposed above, except that we change the default
> behaviour.
> If we introduce a new flag which is the contrary of the old one, we need to
> choose which one is the default, so which one has no effect.

The default behavior should remain as long as we don't deprecate the DEV_RX_OFFLOAD_CRC_STRIP flag.

Logic should be :
Until DEV_RX_OFFLOAD_CRC_STRIP flag is removed:
 - Setting both KEEP_CRC & CRC_STRIP is INVALID - enforced by ethdev. 
 - Setting only CRC_STRIP PMD should strip the CRC
 - Setting only KEEP_CRC PMD should keep the CRC
 - Not setting both PMD should *not* strip the CRC 

> 
> > 2. there is a conversion function on ethdev. Which for example converts
> ~DEV_RX_OFFLOAD_CRC_STRIP -> DEV_RX_OFFLOAD_KEEP_CRC for the
> PMDs.
> > 3. deprecation of DEV_RX_OFFLOAD_CRC_STRIP for applications and
> remove of the conversion functions.
> 
> 
>
  
Ferruh Yigit March 29, 2018, 1:32 p.m. UTC | #5
On 3/29/2018 8:56 AM, Shahaf Shuler wrote:
> Thursday, March 29, 2018 10:43 AM, Thomas Monjalon:
>> 29/03/2018 07:38, Shahaf Shuler:
>>> Wednesday, March 21, 2018 9:48 PM, Ferruh Yigit:
>>>> DEV_RX_OFFLOAD_KEEP_CRC offload flag added.
>>>>
>>>> DEV_RX_OFFLOAD_CRC_STRIP flag will remain one more release but
>>>> default behavior in PMDs is to strip the CRC independent from this flag.
>>>>
>>>> Until DEV_RX_OFFLOAD_CRC_STRIP flag is removed:
>>>> - Setting both KEEP_CRC & CRC_STRIP is INVALID
>>>> - Setting only CRC_STRIP PMD should strip the CRC
>>>> - Setting only KEEP_CRC PMD should keep the CRC
>>>> - Not setting both PMD should strip the CRC
>>>
>>> We cannot have such default behavior, it may break existing applications.
>>>
>>> The API of ethdev offloads says (even though it is not well documented) :
>> DEV_RX_OFFLOAD_CRC_STRIP (emphasis the STRIP).
>>> meaning, if set -> STRIP, if not set -> don't strip.  I am aware to at least one
>> application which wants to have the CRC, and for that purpose it naturally
>> don't set the offload flag.
>>>
>>> The fact some PMDs lack the ability to toggle the CRC stripping should be
>> exposed in the "limitations" section of their related guide.
>>>
>>> Up to here, this is the behavior as defined by the API.
>>>
>>> Now, we want to change it, and I think it makes sense. However I think we
>> should take similar approach to what we did with the ethdev offloads API:
>>> 1. at first stage a new offload flag is exposed DEV_RX_OFFLOAD_KEEP_CRC
>> and implemented on the PMDs.
>>
>> This is what is proposed above, except that we change the default
>> behaviour.
>> If we introduce a new flag which is the contrary of the old one, we need to
>> choose which one is the default, so which one has no effect.
> 
> The default behavior should remain as long as we don't deprecate the DEV_RX_OFFLOAD_CRC_STRIP flag.
> 
> Logic should be :
> Until DEV_RX_OFFLOAD_CRC_STRIP flag is removed:
>  - Setting both KEEP_CRC & CRC_STRIP is INVALID - enforced by ethdev. 
>  - Setting only CRC_STRIP PMD should strip the CRC
>  - Setting only KEEP_CRC PMD should keep the CRC
>  - Not setting both PMD should *not* strip the CRC 

Hi Shahaf,

I think we have two options,

1- This is v1 of this patch and also what you suggest:
v18.05:
- Send deprecation notice

v18.08:
- Add KEEP_CRC flag
- Change the meaning not setting CRC_STRIP to "strip the CRC"

v18.11:
- Remove the CRC_STRIP flag completely

I think this is more proper but takes more time.


2- Based on all the reality that all devices are doing CRC strip already:

v18.05:
- Add KEEP_CRC flag
- Change the meaning not setting CRC_STRIP to "strip the CRC"

v18.08:
- Remove the CRC_STRIP flag completely


With option two since not setting both KEEP_CRC & CRC_STRIP will mean "strip the
CRC", it won't require a change in PMDs, only we can pay attention to get new
PMDs according plan.

This can be more problematic for the case that application ask for keeping CRC,
because the way to say this was not setting CRC_STRIP, it changed to setting
KEEP_CRC without notification. This can be less problem since many PMD already
doesn't support keep crc.

Are you aware of any use case that is broken with option 2?


> 
>>
>>> 2. there is a conversion function on ethdev. Which for example converts
>> ~DEV_RX_OFFLOAD_CRC_STRIP -> DEV_RX_OFFLOAD_KEEP_CRC for the
>> PMDs.
>>> 3. deprecation of DEV_RX_OFFLOAD_CRC_STRIP for applications and
>> remove of the conversion functions.
>>
>>
>>
>
  
Shahaf Shuler April 1, 2018, 7:10 a.m. UTC | #6
Thursday, March 29, 2018 4:32 PM, Ferruh Yigit:
> On 3/29/2018 8:56 AM, Shahaf Shuler wrote:

> > Thursday, March 29, 2018 10:43 AM, Thomas Monjalon:

> >> 29/03/2018 07:38, Shahaf Shuler:

> >>> Wednesday, March 21, 2018 9:48 PM, Ferruh Yigit:

> >>>> DEV_RX_OFFLOAD_KEEP_CRC offload flag added.

> >

> > Logic should be :

> > Until DEV_RX_OFFLOAD_CRC_STRIP flag is removed:

> >  - Setting both KEEP_CRC & CRC_STRIP is INVALID - enforced by ethdev.

> >  - Setting only CRC_STRIP PMD should strip the CRC

> >  - Setting only KEEP_CRC PMD should keep the CRC

> >  - Not setting both PMD should *not* strip the CRC

> 

> Hi Shahaf,

> 

> I think we have two options,

> 

> 1- This is v1 of this patch and also what you suggest:

> v18.05:

> - Send deprecation notice

> 

> v18.08:

> - Add KEEP_CRC flag

> - Change the meaning not setting CRC_STRIP to "strip the CRC"


I think the above line ...

> 

> v18.11:

> - Remove the CRC_STRIP flag completely


Should be here.

It is better to change the default behavior only once the STRIP_CRC flags is removed. 
Without it on v18.08 you break application that wants to have the CRC, and on v18.11 you break the application which actually used it.
It is better to have all the application changes in one release - 18.11. 

> 

> I think this is more proper but takes more time.


Me too. 

> 

> 

> 2- Based on all the reality that all devices are doing CRC strip already:

> 

> v18.05:

> - Add KEEP_CRC flag

> - Change the meaning not setting CRC_STRIP to "strip the CRC"

> 

> v18.08:

> - Remove the CRC_STRIP flag completely

> 

> 

> With option two since not setting both KEEP_CRC & CRC_STRIP will mean

> "strip the CRC", it won't require a change in PMDs, only we can pay attention

> to get new PMDs according plan.

> 

> This can be more problematic for the case that application ask for keeping

> CRC, because the way to say this was not setting CRC_STRIP, it changed to

> setting KEEP_CRC without notification. This can be less problem since many

> PMD already doesn't support keep crc.


but what about those which do support? 
You break application which uses PMDs which support this offload for the sake of the PMD which don't have this capability. 

I think #1 is the clean one. 

> 

> Are you aware of any use case that is broken with option 2?

> 

> 

> >

> >>

> >>> 2. there is a conversion function on ethdev. Which for example

> >>> converts

> >> ~DEV_RX_OFFLOAD_CRC_STRIP -> DEV_RX_OFFLOAD_KEEP_CRC for the

> PMDs.

> >>> 3. deprecation of DEV_RX_OFFLOAD_CRC_STRIP for applications and

> >> remove of the conversion functions.

> >>

> >>

> >>

> >
  
Ferruh Yigit April 16, 2018, 5:23 p.m. UTC | #7
On 4/1/2018 8:10 AM, Shahaf Shuler wrote:
> Thursday, March 29, 2018 4:32 PM, Ferruh Yigit:
>> On 3/29/2018 8:56 AM, Shahaf Shuler wrote:
>>> Thursday, March 29, 2018 10:43 AM, Thomas Monjalon:
>>>> 29/03/2018 07:38, Shahaf Shuler:
>>>>> Wednesday, March 21, 2018 9:48 PM, Ferruh Yigit:
>>>>>> DEV_RX_OFFLOAD_KEEP_CRC offload flag added.
>>>
>>> Logic should be :
>>> Until DEV_RX_OFFLOAD_CRC_STRIP flag is removed:
>>>  - Setting both KEEP_CRC & CRC_STRIP is INVALID - enforced by ethdev.
>>>  - Setting only CRC_STRIP PMD should strip the CRC
>>>  - Setting only KEEP_CRC PMD should keep the CRC
>>>  - Not setting both PMD should *not* strip the CRC
>>
>> Hi Shahaf,
>>
>> I think we have two options,
>>
>> 1- This is v1 of this patch and also what you suggest:
>> v18.05:
>> - Send deprecation notice
>>
>> v18.08:
>> - Add KEEP_CRC flag
>> - Change the meaning not setting CRC_STRIP to "strip the CRC"
> 
> I think the above line ...
> 
>>
>> v18.11:
>> - Remove the CRC_STRIP flag completely
> 
> Should be here.
> 
> It is better to change the default behavior only once the STRIP_CRC flags is removed. 
> Without it on v18.08 you break application that wants to have the CRC, and on v18.11 you break the application which actually used it.
> It is better to have all the application changes in one release - 18.11. 
> 
>>
>> I think this is more proper but takes more time.
> 
> Me too. 
> 
>>
>>
>> 2- Based on all the reality that all devices are doing CRC strip already:
>>
>> v18.05:
>> - Add KEEP_CRC flag
>> - Change the meaning not setting CRC_STRIP to "strip the CRC"
>>
>> v18.08:
>> - Remove the CRC_STRIP flag completely
>>
>>
>> With option two since not setting both KEEP_CRC & CRC_STRIP will mean
>> "strip the CRC", it won't require a change in PMDs, only we can pay attention
>> to get new PMDs according plan.
>>
>> This can be more problematic for the case that application ask for keeping
>> CRC, because the way to say this was not setting CRC_STRIP, it changed to
>> setting KEEP_CRC without notification. This can be less problem since many
>> PMD already doesn't support keep crc.
> 
> but what about those which do support? 
> You break application which uses PMDs which support this offload for the sake of the PMD which don't have this capability. 
> 
> I think #1 is the clean one. 


Any decision here? So will we go with first version of this patch [1]?

[1]
https://dpdk.org/dev/patchwork/patch/36288/

> 
>>
>> Are you aware of any use case that is broken with option 2?
>>
>>
>>>
>>>>
>>>>> 2. there is a conversion function on ethdev. Which for example
>>>>> converts
>>>> ~DEV_RX_OFFLOAD_CRC_STRIP -> DEV_RX_OFFLOAD_KEEP_CRC for the
>> PMDs.
>>>>> 3. deprecation of DEV_RX_OFFLOAD_CRC_STRIP for applications and
>>>> remove of the conversion functions.
>>>>
>>>>
>>>>
>>>
>
  
Thomas Monjalon April 16, 2018, 10:13 p.m. UTC | #8
16/04/2018 19:23, Ferruh Yigit:
> On 4/1/2018 8:10 AM, Shahaf Shuler wrote:
> > Thursday, March 29, 2018 4:32 PM, Ferruh Yigit:
> >> On 3/29/2018 8:56 AM, Shahaf Shuler wrote:
> >>> Thursday, March 29, 2018 10:43 AM, Thomas Monjalon:
> >>>> 29/03/2018 07:38, Shahaf Shuler:
> >>>>> Wednesday, March 21, 2018 9:48 PM, Ferruh Yigit:
> >>>>>> DEV_RX_OFFLOAD_KEEP_CRC offload flag added.
> >>>
> >>> Logic should be :
> >>> Until DEV_RX_OFFLOAD_CRC_STRIP flag is removed:
> >>>  - Setting both KEEP_CRC & CRC_STRIP is INVALID - enforced by ethdev.
> >>>  - Setting only CRC_STRIP PMD should strip the CRC
> >>>  - Setting only KEEP_CRC PMD should keep the CRC
> >>>  - Not setting both PMD should *not* strip the CRC
> >>
> >> Hi Shahaf,
> >>
> >> I think we have two options,
> >>
> >> 1- This is v1 of this patch and also what you suggest:
> >> v18.05:
> >> - Send deprecation notice
> >>
> >> v18.08:
> >> - Add KEEP_CRC flag
> >> - Change the meaning not setting CRC_STRIP to "strip the CRC"
> > 
> > I think the above line ...
> > 
> >>
> >> v18.11:
> >> - Remove the CRC_STRIP flag completely
> > 
> > Should be here.
> > 
> > It is better to change the default behavior only once the STRIP_CRC flags is removed. 
> > Without it on v18.08 you break application that wants to have the CRC, and on v18.11 you break the application which actually used it.
> > It is better to have all the application changes in one release - 18.11. 
> > 
> >>
> >> I think this is more proper but takes more time.
> > 
> > Me too. 
> > 
> >>
> >>
> >> 2- Based on all the reality that all devices are doing CRC strip already:
> >>
> >> v18.05:
> >> - Add KEEP_CRC flag
> >> - Change the meaning not setting CRC_STRIP to "strip the CRC"
> >>
> >> v18.08:
> >> - Remove the CRC_STRIP flag completely
> >>
> >>
> >> With option two since not setting both KEEP_CRC & CRC_STRIP will mean
> >> "strip the CRC", it won't require a change in PMDs, only we can pay attention
> >> to get new PMDs according plan.
> >>
> >> This can be more problematic for the case that application ask for keeping
> >> CRC, because the way to say this was not setting CRC_STRIP, it changed to
> >> setting KEEP_CRC without notification. This can be less problem since many
> >> PMD already doesn't support keep crc.
> > 
> > but what about those which do support? 
> > You break application which uses PMDs which support this offload for the sake of the PMD which don't have this capability. 
> > 
> > I think #1 is the clean one. 
> 
> 
> Any decision here? So will we go with first version of this patch [1]?
> 
> [1]
> https://dpdk.org/dev/patchwork/patch/36288/

Please do a v3 according to what Shahaf is proposing:

- add KEEP_CRC in 18.08 + implement in PMDs + translate ~STRIP_CRC
- remove STRIP_CRC in 18.11 + toggle default to stripping

Or, are we able to do it quickly in 18.05-rc1, and remove in 18.08
with other offloads?
  

Patch

diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index 5e13dca6a..ab1030d42 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -939,6 +939,9 @@  struct rte_eth_conf {
 #define DEV_RX_OFFLOAD_SCATTER		0x00002000
 #define DEV_RX_OFFLOAD_TIMESTAMP	0x00004000
 #define DEV_RX_OFFLOAD_SECURITY         0x00008000
+/* Invalid to set both DEV_RX_OFFLOAD_CRC_STRIP and DEV_RX_OFFLOAD_KEEP_CRC
+ * No DEV_RX_OFFLOAD_CRC_STRIP flag means stripping CRC */
+#define DEV_RX_OFFLOAD_KEEP_CRC		0x00010000
 #define DEV_RX_OFFLOAD_CHECKSUM (DEV_RX_OFFLOAD_IPV4_CKSUM | \
 				 DEV_RX_OFFLOAD_UDP_CKSUM | \
 				 DEV_RX_OFFLOAD_TCP_CKSUM)