patches for DPDK stable branches
 help / color / mirror / Atom feed
From: christian.ehrhardt@canonical.com
To: Dariusz Sosnowski <dsosnowski@nvidia.com>
Cc: Viacheslav Ovsiienko <viacheslavo@nvidia.com>,
	dpdk stable <stable@dpdk.org>
Subject: patch 'net/mlx5: fix hairpin split with set VLAN VID action' has been queued to stable release 19.11.14
Date: Wed, 16 Nov 2022 11:40:03 +0100	[thread overview]
Message-ID: <20221116104012.2975036-8-christian.ehrhardt@canonical.com> (raw)
In-Reply-To: <20221116104012.2975036-1-christian.ehrhardt@canonical.com>

Hi,

FYI, your patch has been queued to stable release 19.11.14

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/23/22. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/cpaelzer/dpdk-stable-queue

This queued commit can be viewed at:
https://github.com/cpaelzer/dpdk-stable-queue/commit/359adae4e7dd24e780de03b1eaee02d124704fcb

Thanks.

Christian Ehrhardt <christian.ehrhardt@canonical.com>

---
From 359adae4e7dd24e780de03b1eaee02d124704fcb Mon Sep 17 00:00:00 2001
From: Dariusz Sosnowski <dsosnowski@nvidia.com>
Date: Mon, 7 Nov 2022 10:28:52 +0000
Subject: [PATCH] net/mlx5: fix hairpin split with set VLAN VID action

[ upstream commit 5615d27b7a1bda7cc58ef07c2e77c6f9a7792c1d ]

Before this patch any flow rule which works on hairpin queues
and which has OF_SET_VLAN_VID action was split into 2 flow rules:

- one subflow for Rx,
- one subflow for Tx.

OF_SET_VLAN_VID action was always placed in the Tx subflow.

Assuming a flow rule which matches VLAN traffic and has both
OF_SET_VLAN_VID action, and MODIFY_FIELD action on VLAN VID,
but no OF_PUSH_VLAN action, the following happened:

- MODIFY_FIELD action was placed in Rx subflow,
- OF_SET_VLAN_VID action was placed in Tx subflow,
- OF_SET_VLAN_VID action is internally compiled to a header modify
  command.

This caused the following issues:

1. Since OF_SET_VLAN_VID was placed in Tx subflow, 2 header modify
   actions were allocated. One for Rx and one for Tx.
2. If OF_SET_VLAN_VID action was placed before MODIFY_FIELD on VLAN VID,
   the flow rule executed header modifications in reverse order.
   MODIFY_FIELD actions were executed first in the Rx subflow and
   OF_SET_VLAN_VID was executed second in Tx subflow.

This patch fixes this behavior by not splitting hairpin flow rules
if OF_SET_VLAN_VID action is used without OF_PUSH_VLAN.
On top of that, if flow rule is split, the OF_SET_VLAN_VID action
is not moved to Tx subflow (for flow rules mentioned above).

Fixes: 210008309b45 ("net/mlx5: fix VLAN push action on hairpin queue")

Signed-off-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
---
 drivers/net/mlx5/mlx5_flow.c | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
index 4d13bbb06c..6931ec50c6 100644
--- a/drivers/net/mlx5/mlx5_flow.c
+++ b/drivers/net/mlx5/mlx5_flow.c
@@ -2870,6 +2870,7 @@ flow_check_hairpin_split(struct rte_eth_dev *dev,
 	int queue_action = 0;
 	int action_n = 0;
 	int split = 0;
+	int push_vlan = 0;
 	const struct rte_flow_action_queue *queue;
 	const struct rte_flow_action_rss *rss;
 	const struct rte_flow_action_raw_encap *raw_encap;
@@ -2877,6 +2878,8 @@ flow_check_hairpin_split(struct rte_eth_dev *dev,
 	if (!attr->ingress)
 		return 0;
 	for (; actions->type != RTE_FLOW_ACTION_TYPE_END; actions++) {
+		if (actions->type == RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN)
+			push_vlan = 1;
 		switch (actions->type) {
 		case RTE_FLOW_ACTION_TYPE_QUEUE:
 			queue = actions->conf;
@@ -2901,11 +2904,15 @@ flow_check_hairpin_split(struct rte_eth_dev *dev,
 		case RTE_FLOW_ACTION_TYPE_VXLAN_ENCAP:
 		case RTE_FLOW_ACTION_TYPE_NVGRE_ENCAP:
 		case RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN:
-		case RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_VID:
 		case RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_PCP:
 			split++;
 			action_n++;
 			break;
+		case RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_VID:
+			if (push_vlan)
+				split++;
+			action_n++;
+			break;
 		case RTE_FLOW_ACTION_TYPE_RAW_ENCAP:
 			raw_encap = actions->conf;
 			if (raw_encap->size >
@@ -3364,20 +3371,33 @@ flow_hairpin_split(struct rte_eth_dev *dev,
 	struct mlx5_rte_flow_item_tag *tag_item;
 	struct rte_flow_item *item;
 	char *addr;
+	int push_vlan = 0;
 	int encap = 0;
 
 	mlx5_flow_id_get(priv->sh->flow_id_pool, flow_id);
 	for (; actions->type != RTE_FLOW_ACTION_TYPE_END; actions++) {
+		if (actions->type == RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN)
+			push_vlan = 1;
 		switch (actions->type) {
 		case RTE_FLOW_ACTION_TYPE_VXLAN_ENCAP:
 		case RTE_FLOW_ACTION_TYPE_NVGRE_ENCAP:
 		case RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN:
-		case RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_VID:
 		case RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_PCP:
 			rte_memcpy(actions_tx, actions,
 			       sizeof(struct rte_flow_action));
 			actions_tx++;
 			break;
+		case RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_VID:
+			if (push_vlan) {
+				rte_memcpy(actions_tx, actions,
+					   sizeof(struct rte_flow_action));
+				actions_tx++;
+			} else {
+				rte_memcpy(actions_rx, actions,
+					   sizeof(struct rte_flow_action));
+				actions_rx++;
+			}
+			break;
 		case RTE_FLOW_ACTION_TYPE_COUNT:
 			if (encap) {
 				rte_memcpy(actions_tx, actions,
-- 
2.38.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2022-11-16 11:36:50.717468320 +0100
+++ 0008-net-mlx5-fix-hairpin-split-with-set-VLAN-VID-action.patch	2022-11-16 11:36:50.412775451 +0100
@@ -1 +1 @@
-From 5615d27b7a1bda7cc58ef07c2e77c6f9a7792c1d Mon Sep 17 00:00:00 2001
+From 359adae4e7dd24e780de03b1eaee02d124704fcb Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 5615d27b7a1bda7cc58ef07c2e77c6f9a7792c1d ]
+
@@ -38 +39,0 @@
-Cc: stable@dpdk.org
@@ -47 +48 @@
-index 65af1b4dd5..ea88882b88 100644
+index 4d13bbb06c..6931ec50c6 100644
@@ -50 +51 @@
-@@ -4591,6 +4591,7 @@ flow_check_hairpin_split(struct rte_eth_dev *dev,
+@@ -2870,6 +2870,7 @@ flow_check_hairpin_split(struct rte_eth_dev *dev,
@@ -58 +59 @@
-@@ -4599,6 +4600,8 @@ flow_check_hairpin_split(struct rte_eth_dev *dev,
+@@ -2877,6 +2878,8 @@ flow_check_hairpin_split(struct rte_eth_dev *dev,
@@ -67 +68 @@
-@@ -4623,11 +4626,15 @@ flow_check_hairpin_split(struct rte_eth_dev *dev,
+@@ -2901,11 +2904,15 @@ flow_check_hairpin_split(struct rte_eth_dev *dev,
@@ -83,2 +84,2 @@
- 			if (raw_encap->size > MLX5_ENCAPSULATION_DECISION_SIZE)
-@@ -5088,19 +5095,32 @@ flow_hairpin_split(struct rte_eth_dev *dev,
+ 			if (raw_encap->size >
+@@ -3364,20 +3371,33 @@ flow_hairpin_split(struct rte_eth_dev *dev,
@@ -90,0 +92 @@
+ 	mlx5_flow_id_get(priv->sh->flow_id_pool, flow_id);

  parent reply	other threads:[~2022-11-16 10:40 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-16 10:39 patch 'net/bonding: set initial value of descriptor count alignment' " christian.ehrhardt
2022-11-16 10:39 ` patch 'net/bonding: fix dropping valid MAC packets' " christian.ehrhardt
2022-11-16 10:39 ` patch 'app/testpmd: make quit flag volatile' " christian.ehrhardt
2022-11-16 10:39 ` patch 'net/bonding: fix mbuf fast free handling' " christian.ehrhardt
2022-11-16 10:40 ` patch 'eal: fix doxygen comments for UUID' " christian.ehrhardt
2022-11-16 10:40 ` patch 'power: fix some doxygen comments' " christian.ehrhardt
2022-11-16 10:40 ` patch 'test/hash: remove dead code in extendable bucket test' " christian.ehrhardt
2022-11-16 10:40 ` christian.ehrhardt [this message]
2022-11-16 10:40 ` patch 'net/ice/base: fix duplicate flow rules' " christian.ehrhardt
2022-11-16 10:40 ` patch 'net/ice: fix scalar Rx path segment' " christian.ehrhardt
2022-11-16 10:40 ` patch 'net/ice: fix scalar Tx " christian.ehrhardt
2022-11-16 10:40 ` patch 'examples/fips_validation: fix typo in error log' " christian.ehrhardt
2022-11-16 10:40 ` patch 'test/crypto: fix bitwise operator in a SNOW3G case' " christian.ehrhardt
2022-11-16 10:40 ` patch 'doc: fix typo depreciated instead of deprecated' " christian.ehrhardt
2022-11-16 10:40 ` patch 'drivers: fix typos found by Lintian' " christian.ehrhardt
2022-11-16 10:40 ` patch 'doc: fix net drivers ordering' " christian.ehrhardt
2022-11-16 10:40 ` patch 'ring: remove leftover comment about watermark' " christian.ehrhardt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221116104012.2975036-8-christian.ehrhardt@canonical.com \
    --to=christian.ehrhardt@canonical.com \
    --cc=dsosnowski@nvidia.com \
    --cc=stable@dpdk.org \
    --cc=viacheslavo@nvidia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).