[dpdk-stable] patch 'net/mlx5: fix assert in dynamic metadata handling' has been queued to stable release 19.11.3

luca.boccassi at gmail.com luca.boccassi at gmail.com
Tue May 19 15:04:38 CEST 2020


Hi,

FYI, your patch has been queued to stable release 19.11.3

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 05/21/20. 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.

Thanks.

Luca Boccassi

---
>From 58ca518c24dc1fd75f6c047efe4fb8bfe23eb6f1 Mon Sep 17 00:00:00 2001
From: Alexander Kozyrev <akozyrev at mellanox.com>
Date: Mon, 27 Apr 2020 18:20:11 +0000
Subject: [PATCH] net/mlx5: fix assert in dynamic metadata handling

[ upstream commit 0c55591588e017f1ef2c1ac845a1fa23ea1e19fb ]

The assert in dynamic flow metadata handling is wrong after the
fix for the performance degradation. The assert meant to check
the metadata mask but was updated with the metadata offset instead.
Fix this assert and restore proper metadata mask checking.

Fixes: 6c55b622a956 ("net/mlx5: set dynamic flow metadata in Rx queues")

Signed-off-by: Alexander Kozyrev <akozyrev at mellanox.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo at mellanox.com>
---
 drivers/net/mlx5/mlx5_rxtx_vec_altivec.h | 7 ++++---
 drivers/net/mlx5/mlx5_rxtx_vec_neon.h    | 5 +++--
 drivers/net/mlx5/mlx5_rxtx_vec_sse.h     | 3 ++-
 3 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_altivec.h b/drivers/net/mlx5/mlx5_rxtx_vec_altivec.h
index 5bc47c714b..23ffb8d036 100644
--- a/drivers/net/mlx5/mlx5_rxtx_vec_altivec.h
+++ b/drivers/net/mlx5/mlx5_rxtx_vec_altivec.h
@@ -263,14 +263,15 @@ rxq_cq_decompress_v(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cq,
 			elts[pos + 2]->hash.fdir.hi = flow_tag;
 			elts[pos + 3]->hash.fdir.hi = flow_tag;
 		}
-		if (!!rxq->flow_meta_mask) {
+		if (rxq->dynf_meta) {
 			int32_t offs = rxq->flow_meta_offset;
 			const uint32_t meta =
 				*RTE_MBUF_DYNFIELD(t_pkt, offs, uint32_t *);
 
 			/* Check if title packet has valid metadata. */
 			if (meta) {
-				assert(t_pkt->ol_flags & offs);
+				assert(t_pkt->ol_flags &
+					    rxq->flow_meta_mask);
 				*RTE_MBUF_DYNFIELD(elts[pos], offs,
 							uint32_t *) = meta;
 				*RTE_MBUF_DYNFIELD(elts[pos + 1], offs,
@@ -1028,7 +1029,7 @@ rxq_burst_v(struct mlx5_rxq_data *rxq, struct rte_mbuf **pkts, uint16_t pkts_n,
 			pkts[pos + 3]->timestamp =
 				rte_be_to_cpu_64(cq[pos + p3].timestamp);
 		}
-		if (!!rxq->flow_meta_mask) {
+		if (rxq->dynf_meta) {
 			uint64_t flag = rxq->flow_meta_mask;
 			int32_t offs = rxq->flow_meta_offset;
 			uint32_t metadata;
diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_neon.h b/drivers/net/mlx5/mlx5_rxtx_vec_neon.h
index 2880f97af1..f92ece4299 100644
--- a/drivers/net/mlx5/mlx5_rxtx_vec_neon.h
+++ b/drivers/net/mlx5/mlx5_rxtx_vec_neon.h
@@ -205,14 +205,15 @@ rxq_cq_decompress_v(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cq,
 			elts[pos + 2]->hash.fdir.hi = flow_tag;
 			elts[pos + 3]->hash.fdir.hi = flow_tag;
 		}
-		if (!!rxq->flow_meta_mask) {
+		if (rxq->dynf_meta) {
 			int32_t offs = rxq->flow_meta_offset;
 			const uint32_t meta =
 				*RTE_MBUF_DYNFIELD(t_pkt, offs, uint32_t *);
 
 			/* Check if title packet has valid metadata. */
 			if (meta) {
-				assert(t_pkt->ol_flags & offs);
+				assert(t_pkt->ol_flags &
+					    rxq->flow_meta_mask);
 				*RTE_MBUF_DYNFIELD(elts[pos], offs,
 							uint32_t *) = meta;
 				*RTE_MBUF_DYNFIELD(elts[pos + 1], offs,
diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_sse.h b/drivers/net/mlx5/mlx5_rxtx_vec_sse.h
index ac8568ed4b..bb59163a26 100644
--- a/drivers/net/mlx5/mlx5_rxtx_vec_sse.h
+++ b/drivers/net/mlx5/mlx5_rxtx_vec_sse.h
@@ -197,7 +197,8 @@ rxq_cq_decompress_v(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cq,
 
 			/* Check if title packet has valid metadata. */
 			if (meta) {
-				assert(t_pkt->ol_flags & offs);
+				assert(t_pkt->ol_flags &
+					    rxq->flow_meta_mask);
 				*RTE_MBUF_DYNFIELD(elts[pos], offs,
 							uint32_t *) = meta;
 				*RTE_MBUF_DYNFIELD(elts[pos + 1], offs,
-- 
2.20.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2020-05-19 14:04:50.262014190 +0100
+++ 0143-net-mlx5-fix-assert-in-dynamic-metadata-handling.patch	2020-05-19 14:04:44.460652796 +0100
@@ -1,15 +1,16 @@
-From 0c55591588e017f1ef2c1ac845a1fa23ea1e19fb Mon Sep 17 00:00:00 2001
+From 58ca518c24dc1fd75f6c047efe4fb8bfe23eb6f1 Mon Sep 17 00:00:00 2001
 From: Alexander Kozyrev <akozyrev at mellanox.com>
 Date: Mon, 27 Apr 2020 18:20:11 +0000
 Subject: [PATCH] net/mlx5: fix assert in dynamic metadata handling
 
+[ upstream commit 0c55591588e017f1ef2c1ac845a1fa23ea1e19fb ]
+
 The assert in dynamic flow metadata handling is wrong after the
 fix for the performance degradation. The assert meant to check
 the metadata mask but was updated with the metadata offset instead.
 Fix this assert and restore proper metadata mask checking.
 
 Fixes: 6c55b622a956 ("net/mlx5: set dynamic flow metadata in Rx queues")
-Cc: stable at dpdk.org
 
 Signed-off-by: Alexander Kozyrev <akozyrev at mellanox.com>
 Acked-by: Viacheslav Ovsiienko <viacheslavo at mellanox.com>
@@ -20,10 +21,10 @@
  3 files changed, 9 insertions(+), 6 deletions(-)
 
 diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_altivec.h b/drivers/net/mlx5/mlx5_rxtx_vec_altivec.h
-index 69b934707c..26715ef450 100644
+index 5bc47c714b..23ffb8d036 100644
 --- a/drivers/net/mlx5/mlx5_rxtx_vec_altivec.h
 +++ b/drivers/net/mlx5/mlx5_rxtx_vec_altivec.h
-@@ -264,14 +264,15 @@ rxq_cq_decompress_v(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cq,
+@@ -263,14 +263,15 @@ rxq_cq_decompress_v(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cq,
  			elts[pos + 2]->hash.fdir.hi = flow_tag;
  			elts[pos + 3]->hash.fdir.hi = flow_tag;
  		}
@@ -35,8 +36,8 @@
  
  			/* Check if title packet has valid metadata. */
  			if (meta) {
--				MLX5_ASSERT(t_pkt->ol_flags & offs);
-+				MLX5_ASSERT(t_pkt->ol_flags &
+-				assert(t_pkt->ol_flags & offs);
++				assert(t_pkt->ol_flags &
 +					    rxq->flow_meta_mask);
  				*RTE_MBUF_DYNFIELD(elts[pos], offs,
  							uint32_t *) = meta;
@@ -51,7 +52,7 @@
  			int32_t offs = rxq->flow_meta_offset;
  			uint32_t metadata;
 diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_neon.h b/drivers/net/mlx5/mlx5_rxtx_vec_neon.h
-index d39e72680b..ecafbf8004 100644
+index 2880f97af1..f92ece4299 100644
 --- a/drivers/net/mlx5/mlx5_rxtx_vec_neon.h
 +++ b/drivers/net/mlx5/mlx5_rxtx_vec_neon.h
 @@ -205,14 +205,15 @@ rxq_cq_decompress_v(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cq,
@@ -66,22 +67,22 @@
  
  			/* Check if title packet has valid metadata. */
  			if (meta) {
--				MLX5_ASSERT(t_pkt->ol_flags & offs);
-+				MLX5_ASSERT(t_pkt->ol_flags &
+-				assert(t_pkt->ol_flags & offs);
++				assert(t_pkt->ol_flags &
 +					    rxq->flow_meta_mask);
  				*RTE_MBUF_DYNFIELD(elts[pos], offs,
  							uint32_t *) = meta;
  				*RTE_MBUF_DYNFIELD(elts[pos + 1], offs,
 diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_sse.h b/drivers/net/mlx5/mlx5_rxtx_vec_sse.h
-index f110f73b4a..6847ae7827 100644
+index ac8568ed4b..bb59163a26 100644
 --- a/drivers/net/mlx5/mlx5_rxtx_vec_sse.h
 +++ b/drivers/net/mlx5/mlx5_rxtx_vec_sse.h
-@@ -199,7 +199,8 @@ rxq_cq_decompress_v(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cq,
+@@ -197,7 +197,8 @@ rxq_cq_decompress_v(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cq,
  
  			/* Check if title packet has valid metadata. */
  			if (meta) {
--				MLX5_ASSERT(t_pkt->ol_flags & offs);
-+				MLX5_ASSERT(t_pkt->ol_flags &
+-				assert(t_pkt->ol_flags & offs);
++				assert(t_pkt->ol_flags &
 +					    rxq->flow_meta_mask);
  				*RTE_MBUF_DYNFIELD(elts[pos], offs,
  							uint32_t *) = meta;


More information about the stable mailing list