[dpdk-stable] patch 'ethdev: fix last item detection on RSS flow expand' has been queued to LTS release 18.11.6

Kevin Traynor ktraynor at redhat.com
Wed Dec 11 22:26:08 CET 2019


Hi,

FYI, your patch has been queued to LTS release 18.11.6

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

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable-queue/commit/97a8a6723d88bdb4ff221f40d7391c7a32625bd3

Thanks.

Kevin.

---
>From 97a8a6723d88bdb4ff221f40d7391c7a32625bd3 Mon Sep 17 00:00:00 2001
From: Matan Azrad <matan at mellanox.com>
Date: Mon, 11 Nov 2019 10:42:05 +0000
Subject: [PATCH] ethdev: fix last item detection on RSS flow expand

[ upstream commit eccc5d3237fc549ba647654a7f74f8b9e9dcaf6d ]

There is a rte_flow API which expands a RSS flow pattern to multiple
patterns according to the RSS hash types in the RSS action
configuration.

As part of the expansion, detection of the last item of the flow uses
the "next proto" field of the last configured item in the pattern list.
Wrongly, the mask of this field was not considered in order to validate
the field.

Ignore "next proto" fields when their corresponded masks invalidate them.

Fixes: fc2dd8dd492f ("ethdev: fix expand RSS flows")

Signed-off-by: Matan Azrad <matan at mellanox.com>
Acked-by: Xiaoyu Min <jackmin at mellanox.com>
Acked-by: Ori Kam <orika at mellanox.com>
---
 lib/librte_ethdev/rte_flow.c | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c
index 5725aceda..7bfc06db7 100644
--- a/lib/librte_ethdev/rte_flow.c
+++ b/lib/librte_ethdev/rte_flow.c
@@ -163,5 +163,7 @@ rte_flow_expand_rss_item_complete(const struct rte_flow_item *item)
 	enum rte_flow_item_type ret = RTE_FLOW_ITEM_TYPE_VOID;
 	uint16_t ether_type = 0;
+	uint16_t ether_type_m;
 	uint8_t ip_next_proto = 0;
+	uint8_t ip_next_proto_m;
 
 	if (item == NULL || item->spec == NULL)
@@ -169,4 +171,11 @@ rte_flow_expand_rss_item_complete(const struct rte_flow_item *item)
 	switch (item->type) {
 	case RTE_FLOW_ITEM_TYPE_ETH:
+		if (item->mask)
+			ether_type_m = ((const struct rte_flow_item_eth *)
+						(item->mask))->type;
+		else
+			ether_type_m = rte_flow_item_eth_mask.type;
+		if (ether_type_m != RTE_BE16(0xFFFF))
+			break;
 		ether_type = ((const struct rte_flow_item_eth *)
 				(item->spec))->type;
@@ -179,4 +188,11 @@ rte_flow_expand_rss_item_complete(const struct rte_flow_item *item)
 		break;
 	case RTE_FLOW_ITEM_TYPE_VLAN:
+		if (item->mask)
+			ether_type_m = ((const struct rte_flow_item_vlan *)
+						(item->mask))->inner_type;
+		else
+			ether_type_m = rte_flow_item_vlan_mask.inner_type;
+		if (ether_type_m != RTE_BE16(0xFFFF))
+			break;
 		ether_type = ((const struct rte_flow_item_vlan *)
 				(item->spec))->inner_type;
@@ -189,4 +205,12 @@ rte_flow_expand_rss_item_complete(const struct rte_flow_item *item)
 		break;
 	case RTE_FLOW_ITEM_TYPE_IPV4:
+		if (item->mask)
+			ip_next_proto_m = ((const struct rte_flow_item_ipv4 *)
+					(item->mask))->hdr.next_proto_id;
+		else
+			ip_next_proto_m =
+				rte_flow_item_ipv4_mask.hdr.next_proto_id;
+		if (ip_next_proto_m != 0xFF)
+			break;
 		ip_next_proto = ((const struct rte_flow_item_ipv4 *)
 				(item->spec))->hdr.next_proto_id;
@@ -201,4 +225,12 @@ rte_flow_expand_rss_item_complete(const struct rte_flow_item *item)
 		break;
 	case RTE_FLOW_ITEM_TYPE_IPV6:
+		if (item->mask)
+			ip_next_proto_m = ((const struct rte_flow_item_ipv6 *)
+						(item->mask))->hdr.proto;
+		else
+			ip_next_proto_m =
+				rte_flow_item_ipv6_mask.hdr.proto;
+		if (ip_next_proto_m != 0xFF)
+			break;
 		ip_next_proto = ((const struct rte_flow_item_ipv6 *)
 				(item->spec))->hdr.proto;
-- 
2.21.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2019-12-11 21:24:14.047572816 +0000
+++ 0016-ethdev-fix-last-item-detection-on-RSS-flow-expand.patch	2019-12-11 21:24:12.599652623 +0000
@@ -1 +1 @@
-From eccc5d3237fc549ba647654a7f74f8b9e9dcaf6d Mon Sep 17 00:00:00 2001
+From 97a8a6723d88bdb4ff221f40d7391c7a32625bd3 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit eccc5d3237fc549ba647654a7f74f8b9e9dcaf6d ]
+
@@ -18 +19,0 @@
-Cc: stable at dpdk.org
@@ -28 +29 @@
-index 8ec9c90cd..d7f29e532 100644
+index 5725aceda..7bfc06db7 100644
@@ -31 +32 @@
-@@ -219,5 +219,7 @@ rte_flow_expand_rss_item_complete(const struct rte_flow_item *item)
+@@ -163,5 +163,7 @@ rte_flow_expand_rss_item_complete(const struct rte_flow_item *item)
@@ -39 +40 @@
-@@ -225,4 +227,11 @@ rte_flow_expand_rss_item_complete(const struct rte_flow_item *item)
+@@ -169,4 +171,11 @@ rte_flow_expand_rss_item_complete(const struct rte_flow_item *item)
@@ -51 +52 @@
-@@ -235,4 +244,11 @@ rte_flow_expand_rss_item_complete(const struct rte_flow_item *item)
+@@ -179,4 +188,11 @@ rte_flow_expand_rss_item_complete(const struct rte_flow_item *item)
@@ -63 +64 @@
-@@ -245,4 +261,12 @@ rte_flow_expand_rss_item_complete(const struct rte_flow_item *item)
+@@ -189,4 +205,12 @@ rte_flow_expand_rss_item_complete(const struct rte_flow_item *item)
@@ -76 +77 @@
-@@ -257,4 +281,12 @@ rte_flow_expand_rss_item_complete(const struct rte_flow_item *item)
+@@ -201,4 +225,12 @@ rte_flow_expand_rss_item_complete(const struct rte_flow_item *item)



More information about the stable mailing list