[dpdk-stable] patch 'net/mlx5: fix flow items size calculation' has been queued to LTS release 18.11.10

Kevin Traynor ktraynor at redhat.com
Fri Aug 28 12:12:53 CEST 2020


Hi,

FYI, your patch has been queued to LTS release 18.11.10

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

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/e070c7603fcab00ade74e5e651fd3cb9b7f3c356

Thanks.

Kevin.

---
>From e070c7603fcab00ade74e5e651fd3cb9b7f3c356 Mon Sep 17 00:00:00 2001
From: Raslan Darawsheh <rasland at mellanox.com>
Date: Thu, 16 Jul 2020 15:14:55 +0300
Subject: [PATCH] net/mlx5: fix flow items size calculation

[ upstream commit d13f9760866884d81563624fbf160f3054b70f19 ]

flow_dv_get_item_len returns the actual header size of
an rte_flow item.

Changing any of the structs for rte_flow items by adding
or removing some extra fields will break this function.

This fixes the behavior by returning the actual header size
of each item.

Fixes: 34d41b7aa3bf ("net/mlx5: add VXLAN encap action to Direct Verbs")

Signed-off-by: Raslan Darawsheh <rasland at mellanox.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo at mellanox.com>
---
 drivers/net/mlx5/mlx5_flow_dv.c | 31 ++++++++++++++-----------------
 1 file changed, 14 insertions(+), 17 deletions(-)

diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index 460461ab0d..aa8f5977fa 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -27,4 +27,5 @@
 #include <rte_ip.h>
 #include <rte_gre.h>
+#include <rte_mpls.h>
 
 #include "mlx5.h"
@@ -350,5 +351,5 @@ flow_dv_encap_decap_resource_register
 
 /**
- * Get the size of specific rte_flow_item_type
+ * Get the size of specific rte_flow_item_type hdr size
  *
  * @param[in] item_type
@@ -359,5 +360,5 @@ flow_dv_encap_decap_resource_register
  */
 static size_t
-flow_dv_get_item_len(const enum rte_flow_item_type item_type)
+flow_dv_get_item_hdr_len(const enum rte_flow_item_type item_type)
 {
 	size_t retval;
@@ -365,35 +366,31 @@ flow_dv_get_item_len(const enum rte_flow_item_type item_type)
 	switch (item_type) {
 	case RTE_FLOW_ITEM_TYPE_ETH:
-		retval = sizeof(struct rte_flow_item_eth);
+		retval = sizeof(struct ether_hdr);
 		break;
 	case RTE_FLOW_ITEM_TYPE_VLAN:
-		retval = sizeof(struct rte_flow_item_vlan);
+		retval = sizeof(struct vlan_hdr);
 		break;
 	case RTE_FLOW_ITEM_TYPE_IPV4:
-		retval = sizeof(struct rte_flow_item_ipv4);
+		retval = sizeof(struct ipv4_hdr);
 		break;
 	case RTE_FLOW_ITEM_TYPE_IPV6:
-		retval = sizeof(struct rte_flow_item_ipv6);
+		retval = sizeof(struct ipv6_hdr);
 		break;
 	case RTE_FLOW_ITEM_TYPE_UDP:
-		retval = sizeof(struct rte_flow_item_udp);
+		retval = sizeof(struct udp_hdr);
 		break;
 	case RTE_FLOW_ITEM_TYPE_TCP:
-		retval = sizeof(struct rte_flow_item_tcp);
+		retval = sizeof(struct tcp_hdr);
 		break;
 	case RTE_FLOW_ITEM_TYPE_VXLAN:
-		retval = sizeof(struct rte_flow_item_vxlan);
+	case RTE_FLOW_ITEM_TYPE_VXLAN_GPE:
+		retval = sizeof(struct vxlan_hdr);
 		break;
 	case RTE_FLOW_ITEM_TYPE_GRE:
-		retval = sizeof(struct rte_flow_item_gre);
-		break;
 	case RTE_FLOW_ITEM_TYPE_NVGRE:
-		retval = sizeof(struct rte_flow_item_nvgre);
-		break;
-	case RTE_FLOW_ITEM_TYPE_VXLAN_GPE:
-		retval = sizeof(struct rte_flow_item_vxlan_gpe);
+		retval = sizeof(struct gre_hdr);
 		break;
 	case RTE_FLOW_ITEM_TYPE_MPLS:
-		retval = sizeof(struct rte_flow_item_mpls);
+		retval = sizeof(struct mpls_hdr);
 		break;
 	case RTE_FLOW_ITEM_TYPE_VOID: /* Fall through. */
@@ -448,5 +445,5 @@ flow_dv_convert_encap_data(const struct rte_flow_item *items, uint8_t *buf,
 					  NULL, "invalid empty data");
 	for (; items->type != RTE_FLOW_ITEM_TYPE_END; items++) {
-		len = flow_dv_get_item_len(items->type);
+		len = flow_dv_get_item_hdr_len(items->type);
 		if (len + temp_size > MLX5_ENCAP_MAX_LEN)
 			return rte_flow_error_set(error, EINVAL,
-- 
2.26.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2020-08-28 11:03:26.567266876 +0100
+++ 0027-net-mlx5-fix-flow-items-size-calculation.patch	2020-08-28 11:03:25.954955693 +0100
@@ -1 +1 @@
-From d13f9760866884d81563624fbf160f3054b70f19 Mon Sep 17 00:00:00 2001
+From e070c7603fcab00ade74e5e651fd3cb9b7f3c356 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit d13f9760866884d81563624fbf160f3054b70f19 ]
+
@@ -16 +17,0 @@
-Cc: stable at dpdk.org
@@ -25 +26 @@
-index f0cc7ad1a4..e7f0a12ac1 100644
+index 460461ab0d..aa8f5977fa 100644
@@ -28,3 +29,3 @@
-@@ -21,4 +21,5 @@
- #include <rte_gtp.h>
- #include <rte_eal_paging.h>
+@@ -27,4 +27,5 @@
+ #include <rte_ip.h>
+ #include <rte_gre.h>
@@ -33,3 +34,3 @@
- #include <mlx5_glue.h>
-@@ -2867,5 +2868,5 @@ flow_dv_push_vlan_action_resource_register
- }
+ #include "mlx5.h"
+@@ -350,5 +351,5 @@ flow_dv_encap_decap_resource_register
+ 
@@ -41 +42 @@
-@@ -2876,5 +2877,5 @@ flow_dv_push_vlan_action_resource_register
+@@ -359,5 +360,5 @@ flow_dv_encap_decap_resource_register
@@ -48 +49 @@
-@@ -2882,35 +2883,31 @@ flow_dv_get_item_len(const enum rte_flow_item_type item_type)
+@@ -365,35 +366,31 @@ flow_dv_get_item_len(const enum rte_flow_item_type item_type)
@@ -52 +53 @@
-+		retval = sizeof(struct rte_ether_hdr);
++		retval = sizeof(struct ether_hdr);
@@ -56 +57 @@
-+		retval = sizeof(struct rte_vlan_hdr);
++		retval = sizeof(struct vlan_hdr);
@@ -60 +61 @@
-+		retval = sizeof(struct rte_ipv4_hdr);
++		retval = sizeof(struct ipv4_hdr);
@@ -64 +65 @@
-+		retval = sizeof(struct rte_ipv6_hdr);
++		retval = sizeof(struct ipv6_hdr);
@@ -68 +69 @@
-+		retval = sizeof(struct rte_udp_hdr);
++		retval = sizeof(struct udp_hdr);
@@ -72 +73 @@
-+		retval = sizeof(struct rte_tcp_hdr);
++		retval = sizeof(struct tcp_hdr);
@@ -77 +78 @@
-+		retval = sizeof(struct rte_vxlan_hdr);
++		retval = sizeof(struct vxlan_hdr);
@@ -87 +88 @@
-+		retval = sizeof(struct rte_gre_hdr);
++		retval = sizeof(struct gre_hdr);
@@ -91 +92 @@
-+		retval = sizeof(struct rte_mpls_hdr);
++		retval = sizeof(struct mpls_hdr);
@@ -94 +95 @@
-@@ -2965,5 +2962,5 @@ flow_dv_convert_encap_data(const struct rte_flow_item *items, uint8_t *buf,
+@@ -448,5 +445,5 @@ flow_dv_convert_encap_data(const struct rte_flow_item *items, uint8_t *buf,



More information about the stable mailing list