patches for DPDK stable branches
 help / color / mirror / Atom feed
* [dpdk-stable] [PATCH] ethdev: fix QinQ strip offload support
@ 2019-04-14 11:11 viveksharma
  2019-04-15 15:54 ` [dpdk-stable] [dpdk-dev] " Stephen Hemminger
  2019-04-17  7:40 ` [dpdk-stable] [PATCH v2] " viveksharma
  0 siblings, 2 replies; 7+ messages in thread
From: viveksharma @ 2019-04-14 11:11 UTC (permalink / raw)
  To: dev; +Cc: thomas, ferruh.yigit, arybchenko, Vivek Sharma, stable

From: Vivek Sharma <viveksharma@marvell.com>

Enable missing support for QinQ strip rx offload
in vlan offload set/get methods.

Fixes: cc9d0456b870 ("i40e: support double vlan stripping and insertion")
Cc: stable@dpdk.org

Signed-off-by: Vivek Sharma <viveksharma@marvell.com>
---
 lib/librte_ethdev/rte_ethdev.c | 17 +++++++++++++++++
 lib/librte_ethdev/rte_ethdev.h |  5 ++++-
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
index 243beb4..222df4e 100644
--- a/lib/librte_ethdev/rte_ethdev.c
+++ b/lib/librte_ethdev/rte_ethdev.c
@@ -2770,6 +2770,19 @@ rte_eth_dev_set_vlan_offload(uint16_t port_id, int offload_mask)
 		mask |= ETH_VLAN_EXTEND_MASK;
 	}
 
+	cur = !!(offload_mask & ETH_QINQ_STRIP_OFFLOAD);
+	org = !!(dev->data->dev_conf.rxmode.offloads &
+		 DEV_RX_OFFLOAD_QINQ_STRIP);
+	if (cur != org) {
+		if (cur)
+			dev->data->dev_conf.rxmode.offloads |=
+				DEV_RX_OFFLOAD_QINQ_STRIP;
+		else
+			dev->data->dev_conf.rxmode.offloads &=
+				~DEV_RX_OFFLOAD_QINQ_STRIP;
+		mask |= ETH_QINQ_STRIP_MASK;
+	}
+
 	/*no change*/
 	if (mask == 0)
 		return ret;
@@ -2805,6 +2818,10 @@ rte_eth_dev_get_vlan_offload(uint16_t port_id)
 	    DEV_RX_OFFLOAD_VLAN_EXTEND)
 		ret |= ETH_VLAN_EXTEND_OFFLOAD;
 
+	if (dev->data->dev_conf.rxmode.offloads &
+	    DEV_RX_OFFLOAD_QINQ_STRIP)
+		ret |= DEV_RX_OFFLOAD_QINQ_STRIP;
+
 	return ret;
 }
 
diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
index 40a068f..c1792f4 100644
--- a/lib/librte_ethdev/rte_ethdev.h
+++ b/lib/librte_ethdev/rte_ethdev.h
@@ -550,11 +550,13 @@ struct rte_eth_rss_conf {
 #define ETH_VLAN_STRIP_OFFLOAD   0x0001 /**< VLAN Strip  On/Off */
 #define ETH_VLAN_FILTER_OFFLOAD  0x0002 /**< VLAN Filter On/Off */
 #define ETH_VLAN_EXTEND_OFFLOAD  0x0004 /**< VLAN Extend On/Off */
+#define ETH_QINQ_STRIP_OFFLOAD   0x0008 /**< QINQ Strip On/Off */
 
 /* Definitions used for mask VLAN setting */
 #define ETH_VLAN_STRIP_MASK   0x0001 /**< VLAN Strip  setting mask */
 #define ETH_VLAN_FILTER_MASK  0x0002 /**< VLAN Filter  setting mask*/
 #define ETH_VLAN_EXTEND_MASK  0x0004 /**< VLAN Extend  setting mask*/
+#define ETH_QINQ_STRIP_MASK   0x0008 /**< QINQ Strip  setting mask */
 #define ETH_VLAN_ID_MAX       0x0FFF /**< VLAN ID is in lower 12 bits*/
 
 /* Definitions used for receive MAC address   */
@@ -965,7 +967,8 @@ struct rte_eth_conf {
 				 DEV_RX_OFFLOAD_TCP_CKSUM)
 #define DEV_RX_OFFLOAD_VLAN (DEV_RX_OFFLOAD_VLAN_STRIP | \
 			     DEV_RX_OFFLOAD_VLAN_FILTER | \
-			     DEV_RX_OFFLOAD_VLAN_EXTEND)
+			     DEV_RX_OFFLOAD_VLAN_EXTEND | \
+			     DEV_RX_OFFLOAD_QINQ_STRIP)
 
 /*
  * If new Rx offload capabilities are defined, they also must be
-- 
2.7.4


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [dpdk-stable] [dpdk-dev] [PATCH] ethdev: fix QinQ strip offload support
  2019-04-14 11:11 [dpdk-stable] [PATCH] ethdev: fix QinQ strip offload support viveksharma
@ 2019-04-15 15:54 ` Stephen Hemminger
  2019-04-15 21:33   ` Rami Rosen
  2019-04-17  7:40 ` [dpdk-stable] [PATCH v2] " viveksharma
  1 sibling, 1 reply; 7+ messages in thread
From: Stephen Hemminger @ 2019-04-15 15:54 UTC (permalink / raw)
  To: viveksharma; +Cc: dev, thomas, ferruh.yigit, arybchenko, stable

On Sun, 14 Apr 2019 16:41:42 +0530
<viveksharma@marvell.com> wrote:

>  
> +	cur = !!(offload_mask & ETH_QINQ_STRIP_OFFLOAD);
> +	org = !!(dev->data->dev_conf.rxmode.offloads &
> +		 DEV_RX_OFFLOAD_QINQ_STRIP);
> +	if (cur != org) {
> +		if (cur)
> +			dev->data->dev_conf.rxmode.offloads |=
> +				DEV_RX_OFFLOAD_QINQ_STRIP;
> +		else
> +			dev->data->dev_conf.rxmode.offloads &=
> +				~DEV_RX_OFFLOAD_QINQ_STRIP;
> +		mask |= ETH_QINQ_STRIP_MASK;
> +	}
> +
>  	/*no change*/

Using a local (pointer) variable for dev->data->dev_conf.rxmode.offloads
would make the code more readable and lines shorter.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [dpdk-stable] [dpdk-dev] [PATCH] ethdev: fix QinQ strip offload support
  2019-04-15 15:54 ` [dpdk-stable] [dpdk-dev] " Stephen Hemminger
@ 2019-04-15 21:33   ` Rami Rosen
  0 siblings, 0 replies; 7+ messages in thread
From: Rami Rosen @ 2019-04-15 21:33 UTC (permalink / raw)
  To: Stephen Hemminger
  Cc: viveksharma, dev, thomas, ferruh.yigit, arybchenko, stable

>Using a local (pointer) variable for dev->data->dev_conf.rxmode.offloads
>would make the code more readable and lines shorter.

+1

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [dpdk-stable] [PATCH v2] ethdev: fix QinQ strip offload support
  2019-04-14 11:11 [dpdk-stable] [PATCH] ethdev: fix QinQ strip offload support viveksharma
  2019-04-15 15:54 ` [dpdk-stable] [dpdk-dev] " Stephen Hemminger
@ 2019-04-17  7:40 ` viveksharma
  2019-04-17  8:34   ` Thomas Monjalon
  1 sibling, 1 reply; 7+ messages in thread
From: viveksharma @ 2019-04-17  7:40 UTC (permalink / raw)
  To: dev; +Cc: thomas, ferruh.yigit, arybchenko, Vivek Sharma, stable

From: Vivek Sharma <viveksharma@marvell.com>

Enable missing support for QinQ strip rx offload
in vlan offload set/get methods.

Fixes: cc9d0456b870 ("i40e: support double vlan stripping and insertion")
Cc: stable@dpdk.org

Signed-off-by: Vivek Sharma <viveksharma@marvell.com>
---
v2:
* Use pointer to dereference dev->data->dev_conf.rxmode.offloads 
 
 lib/librte_ethdev/rte_ethdev.c | 55 +++++++++++++++++++++++-------------------
 lib/librte_ethdev/rte_ethdev.h |  5 +++-
 2 files changed, 34 insertions(+), 26 deletions(-)

diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
index 243beb4..3e770bc 100644
--- a/lib/librte_ethdev/rte_ethdev.c
+++ b/lib/librte_ethdev/rte_ethdev.c
@@ -2723,53 +2723,56 @@ rte_eth_dev_set_vlan_offload(uint16_t port_id, int offload_mask)
 	int mask = 0;
 	int cur, org = 0;
 	uint64_t orig_offloads;
+	uint64_t *dev_offloads;
 
 	RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
 	dev = &rte_eth_devices[port_id];
 
 	/* save original values in case of failure */
 	orig_offloads = dev->data->dev_conf.rxmode.offloads;
+	dev_offloads = &dev->data->dev_conf.rxmode.offloads;
 
 	/*check which option changed by application*/
 	cur = !!(offload_mask & ETH_VLAN_STRIP_OFFLOAD);
-	org = !!(dev->data->dev_conf.rxmode.offloads &
-		 DEV_RX_OFFLOAD_VLAN_STRIP);
+	org = !!(*dev_offloads & DEV_RX_OFFLOAD_VLAN_STRIP);
 	if (cur != org) {
 		if (cur)
-			dev->data->dev_conf.rxmode.offloads |=
-				DEV_RX_OFFLOAD_VLAN_STRIP;
+			*dev_offloads |= DEV_RX_OFFLOAD_VLAN_STRIP;
 		else
-			dev->data->dev_conf.rxmode.offloads &=
-				~DEV_RX_OFFLOAD_VLAN_STRIP;
+			*dev_offloads &= ~DEV_RX_OFFLOAD_VLAN_STRIP;
 		mask |= ETH_VLAN_STRIP_MASK;
 	}
 
 	cur = !!(offload_mask & ETH_VLAN_FILTER_OFFLOAD);
-	org = !!(dev->data->dev_conf.rxmode.offloads &
-		 DEV_RX_OFFLOAD_VLAN_FILTER);
+	org = !!(*dev_offloads & DEV_RX_OFFLOAD_VLAN_FILTER);
 	if (cur != org) {
 		if (cur)
-			dev->data->dev_conf.rxmode.offloads |=
-				DEV_RX_OFFLOAD_VLAN_FILTER;
+			*dev_offloads |= DEV_RX_OFFLOAD_VLAN_FILTER;
 		else
-			dev->data->dev_conf.rxmode.offloads &=
-				~DEV_RX_OFFLOAD_VLAN_FILTER;
+			*dev_offloads &= ~DEV_RX_OFFLOAD_VLAN_FILTER;
 		mask |= ETH_VLAN_FILTER_MASK;
 	}
 
 	cur = !!(offload_mask & ETH_VLAN_EXTEND_OFFLOAD);
-	org = !!(dev->data->dev_conf.rxmode.offloads &
-		 DEV_RX_OFFLOAD_VLAN_EXTEND);
+	org = !!(*dev_offloads & DEV_RX_OFFLOAD_VLAN_EXTEND);
 	if (cur != org) {
 		if (cur)
-			dev->data->dev_conf.rxmode.offloads |=
-				DEV_RX_OFFLOAD_VLAN_EXTEND;
+			*dev_offloads |= DEV_RX_OFFLOAD_VLAN_EXTEND;
 		else
-			dev->data->dev_conf.rxmode.offloads &=
-				~DEV_RX_OFFLOAD_VLAN_EXTEND;
+			*dev_offloads &= ~DEV_RX_OFFLOAD_VLAN_EXTEND;
 		mask |= ETH_VLAN_EXTEND_MASK;
 	}
 
+	cur = !!(offload_mask & ETH_QINQ_STRIP_OFFLOAD);
+	org = !!(*dev_offloads & DEV_RX_OFFLOAD_QINQ_STRIP);
+	if (cur != org) {
+		if (cur)
+			*dev_offloads |= DEV_RX_OFFLOAD_QINQ_STRIP;
+		else
+			*dev_offloads &= ~DEV_RX_OFFLOAD_QINQ_STRIP;
+		mask |= ETH_QINQ_STRIP_MASK;
+	}
+
 	/*no change*/
 	if (mask == 0)
 		return ret;
@@ -2778,7 +2781,7 @@ rte_eth_dev_set_vlan_offload(uint16_t port_id, int offload_mask)
 	ret = (*dev->dev_ops->vlan_offload_set)(dev, mask);
 	if (ret) {
 		/* hit an error restore  original values */
-		dev->data->dev_conf.rxmode.offloads = orig_offloads;
+		*dev_offloads = orig_offloads;
 	}
 
 	return eth_err(port_id, ret);
@@ -2788,23 +2791,25 @@ int
 rte_eth_dev_get_vlan_offload(uint16_t port_id)
 {
 	struct rte_eth_dev *dev;
+	uint64_t *dev_offloads;
 	int ret = 0;
 
 	RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
 	dev = &rte_eth_devices[port_id];
+	dev_offloads = &dev->data->dev_conf.rxmode.offloads;
 
-	if (dev->data->dev_conf.rxmode.offloads &
-	    DEV_RX_OFFLOAD_VLAN_STRIP)
+	if (*dev_offloads & DEV_RX_OFFLOAD_VLAN_STRIP)
 		ret |= ETH_VLAN_STRIP_OFFLOAD;
 
-	if (dev->data->dev_conf.rxmode.offloads &
-	    DEV_RX_OFFLOAD_VLAN_FILTER)
+	if (*dev_offloads & DEV_RX_OFFLOAD_VLAN_FILTER)
 		ret |= ETH_VLAN_FILTER_OFFLOAD;
 
-	if (dev->data->dev_conf.rxmode.offloads &
-	    DEV_RX_OFFLOAD_VLAN_EXTEND)
+	if (*dev_offloads & DEV_RX_OFFLOAD_VLAN_EXTEND)
 		ret |= ETH_VLAN_EXTEND_OFFLOAD;
 
+	if (*dev_offloads & DEV_RX_OFFLOAD_QINQ_STRIP)
+		ret |= DEV_RX_OFFLOAD_QINQ_STRIP;
+
 	return ret;
 }
 
diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
index 40a068f..c1792f4 100644
--- a/lib/librte_ethdev/rte_ethdev.h
+++ b/lib/librte_ethdev/rte_ethdev.h
@@ -550,11 +550,13 @@ struct rte_eth_rss_conf {
 #define ETH_VLAN_STRIP_OFFLOAD   0x0001 /**< VLAN Strip  On/Off */
 #define ETH_VLAN_FILTER_OFFLOAD  0x0002 /**< VLAN Filter On/Off */
 #define ETH_VLAN_EXTEND_OFFLOAD  0x0004 /**< VLAN Extend On/Off */
+#define ETH_QINQ_STRIP_OFFLOAD   0x0008 /**< QINQ Strip On/Off */
 
 /* Definitions used for mask VLAN setting */
 #define ETH_VLAN_STRIP_MASK   0x0001 /**< VLAN Strip  setting mask */
 #define ETH_VLAN_FILTER_MASK  0x0002 /**< VLAN Filter  setting mask*/
 #define ETH_VLAN_EXTEND_MASK  0x0004 /**< VLAN Extend  setting mask*/
+#define ETH_QINQ_STRIP_MASK   0x0008 /**< QINQ Strip  setting mask */
 #define ETH_VLAN_ID_MAX       0x0FFF /**< VLAN ID is in lower 12 bits*/
 
 /* Definitions used for receive MAC address   */
@@ -965,7 +967,8 @@ struct rte_eth_conf {
 				 DEV_RX_OFFLOAD_TCP_CKSUM)
 #define DEV_RX_OFFLOAD_VLAN (DEV_RX_OFFLOAD_VLAN_STRIP | \
 			     DEV_RX_OFFLOAD_VLAN_FILTER | \
-			     DEV_RX_OFFLOAD_VLAN_EXTEND)
+			     DEV_RX_OFFLOAD_VLAN_EXTEND | \
+			     DEV_RX_OFFLOAD_QINQ_STRIP)
 
 /*
  * If new Rx offload capabilities are defined, they also must be
-- 
2.7.4


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [dpdk-stable] [PATCH v2] ethdev: fix QinQ strip offload support
  2019-04-17  7:40 ` [dpdk-stable] [PATCH v2] " viveksharma
@ 2019-04-17  8:34   ` Thomas Monjalon
  2019-04-18  7:38     ` [dpdk-stable] [EXT] " Vivek Kumar Sharma
  0 siblings, 1 reply; 7+ messages in thread
From: Thomas Monjalon @ 2019-04-17  8:34 UTC (permalink / raw)
  To: viveksharma; +Cc: dev, ferruh.yigit, arybchenko, stable

17/04/2019 09:40, viveksharma@marvell.com:
> From: Vivek Sharma <viveksharma@marvell.com>
> 
> Enable missing support for QinQ strip rx offload
> in vlan offload set/get methods.
> 
> Fixes: cc9d0456b870 ("i40e: support double vlan stripping and insertion")
> Cc: stable@dpdk.org

Not sure it is a fix.
The commit mentioned above allows some kind of offload config.
You are extending the offload config with support in
rte_eth_dev_set_vlan_offload().



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [dpdk-stable] [EXT] Re: [PATCH v2] ethdev: fix QinQ strip offload support
  2019-04-17  8:34   ` Thomas Monjalon
@ 2019-04-18  7:38     ` Vivek Kumar Sharma
  2019-04-18  8:07       ` Thomas Monjalon
  0 siblings, 1 reply; 7+ messages in thread
From: Vivek Kumar Sharma @ 2019-04-18  7:38 UTC (permalink / raw)
  To: Thomas Monjalon
  Cc: dev, ferruh.yigit, arybchenko, stable, intoviveksharma,
	Stephen Hemminger, ramirose

>> From: Vivek Sharma <viveksharma@marvell.com>
>>
>> Enable missing support for QinQ strip rx offload
>> in vlan offload set/get methods.
>>
>> Fixes: cc9d0456b870 ("i40e: support double vlan stripping and insertion")
>> Cc: stable@dpdk.org

>Not sure it is a fix.
>The commit mentioned above allows some kind of offload config.
>You are extending the offload config with support in
>rte_eth_dev_set_vlan_offload().

DEV_RX_OFFLOAD_QINQ_STRIP was introduced in cc9d0456b870 ("i40e: support double vlan stripping and insertion"). But, the means to utilize this capability by enabling this rx offload for an ethdev was missing from the patch. The current patch fixes that missing functionality so that user can enable QinQ strip rx offload for capable devices. 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [dpdk-stable] [EXT] Re: [PATCH v2] ethdev: fix QinQ strip offload support
  2019-04-18  7:38     ` [dpdk-stable] [EXT] " Vivek Kumar Sharma
@ 2019-04-18  8:07       ` Thomas Monjalon
  0 siblings, 0 replies; 7+ messages in thread
From: Thomas Monjalon @ 2019-04-18  8:07 UTC (permalink / raw)
  To: Vivek Kumar Sharma
  Cc: stable, dev, ferruh.yigit, arybchenko, intoviveksharma,
	Stephen Hemminger, ramirose

18/04/2019 09:38, Vivek Kumar Sharma:
> >> From: Vivek Sharma <viveksharma@marvell.com>
> >>
> >> Enable missing support for QinQ strip rx offload
> >> in vlan offload set/get methods.
> >>
> >> Fixes: cc9d0456b870 ("i40e: support double vlan stripping and insertion")
> >> Cc: stable@dpdk.org
> 
> >Not sure it is a fix.
> >The commit mentioned above allows some kind of offload config.
> >You are extending the offload config with support in
> >rte_eth_dev_set_vlan_offload().
> 
> DEV_RX_OFFLOAD_QINQ_STRIP was introduced in cc9d0456b870 ("i40e: support double vlan stripping and insertion"). But, the means to utilize this capability by enabling this rx offload for an ethdev was missing from the patch. The current patch fixes that missing functionality so that user can enable QinQ strip rx offload for capable devices. 

It was possible to utilize the offload by setting the flag in mbuf.
You are adding a way to configure it at port level. So it is not a fix.



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2019-04-18  8:08 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-14 11:11 [dpdk-stable] [PATCH] ethdev: fix QinQ strip offload support viveksharma
2019-04-15 15:54 ` [dpdk-stable] [dpdk-dev] " Stephen Hemminger
2019-04-15 21:33   ` Rami Rosen
2019-04-17  7:40 ` [dpdk-stable] [PATCH v2] " viveksharma
2019-04-17  8:34   ` Thomas Monjalon
2019-04-18  7:38     ` [dpdk-stable] [EXT] " Vivek Kumar Sharma
2019-04-18  8:07       ` Thomas Monjalon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).