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

Raslan Darawsheh rasland at mellanox.com
Mon Aug 10 09:27:34 CEST 2020


Hi Luca,

please be noted that with this change you'll get a compilation failure when debug is enabled for MLX5,
if we don't have this patch backported before it
http://patches.dpdk.org/patch/74534/



Kindest regards

Raslan Darawsheh

________________________________
From: luca.boccassi at gmail.com <luca.boccassi at gmail.com>
Sent: Thursday, August 6, 2020 12:53 PM
To: Raslan Darawsheh <rasland at mellanox.com>
Cc: Slava Ovsiienko <viacheslavo at mellanox.com>; dpdk stable <stable at dpdk.org>
Subject: patch 'net/mlx5: fix flow items size calculation' has been queued to stable release 19.11.4

Hi,

FYI, your patch has been queued to stable release 19.11.4

Note it hasn't been pushed to https://eur03.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdpdk.org%2Fbrowse%2Fdpdk-stable&data=02%7C01%7Crasland%40mellanox.com%7C1c9c6e447cb242871ce408d839ef3c65%7Ca652971c7d2e4d9ba6a4d149256f461b%7C0%7C0%7C637323046965820421&sdata=%2Fxuhw7GFWJK3JMQ5aLmI6Ml%2BXzpVNoJatg89ECB5XeM%3D&reserved=0 yet.
It will be pushed if I get no objections before 08/08/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 e8df8d9adc133f10e896bd7d7ca62ca237222bbb 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 bfb27a602..e40cf3c2a 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -27,6 +27,7 @@
 #include <rte_ip.h>
 #include <rte_gre.h>
 #include <rte_vxlan.h>
+#include <rte_mpls.h>

 #include "mlx5.h"
 #include "mlx5_defs.h"
@@ -2661,7 +2662,7 @@ flow_dv_push_vlan_action_resource_register
         return 0;
 }
 /**
- * Get the size of specific rte_flow_item_type
+ * Get the size of specific rte_flow_item_type hdr size
  *
  * @param[in] item_type
  *   Tested rte_flow_item_type.
@@ -2670,43 +2671,39 @@ flow_dv_push_vlan_action_resource_register
  *   sizeof struct item_type, 0 if void or irrelevant.
  */
 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;

         switch (item_type) {
         case RTE_FLOW_ITEM_TYPE_ETH:
-               retval = sizeof(struct rte_flow_item_eth);
+               retval = sizeof(struct rte_ether_hdr);
                 break;
         case RTE_FLOW_ITEM_TYPE_VLAN:
-               retval = sizeof(struct rte_flow_item_vlan);
+               retval = sizeof(struct rte_vlan_hdr);
                 break;
         case RTE_FLOW_ITEM_TYPE_IPV4:
-               retval = sizeof(struct rte_flow_item_ipv4);
+               retval = sizeof(struct rte_ipv4_hdr);
                 break;
         case RTE_FLOW_ITEM_TYPE_IPV6:
-               retval = sizeof(struct rte_flow_item_ipv6);
+               retval = sizeof(struct rte_ipv6_hdr);
                 break;
         case RTE_FLOW_ITEM_TYPE_UDP:
-               retval = sizeof(struct rte_flow_item_udp);
+               retval = sizeof(struct rte_udp_hdr);
                 break;
         case RTE_FLOW_ITEM_TYPE_TCP:
-               retval = sizeof(struct rte_flow_item_tcp);
+               retval = sizeof(struct rte_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 rte_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 rte_gre_hdr);
                 break;
         case RTE_FLOW_ITEM_TYPE_MPLS:
-               retval = sizeof(struct rte_flow_item_mpls);
+               retval = sizeof(struct rte_mpls_hdr);
                 break;
         case RTE_FLOW_ITEM_TYPE_VOID: /* Fall through. */
         default:
@@ -2759,7 +2756,7 @@ flow_dv_convert_encap_data(const struct rte_flow_item *items, uint8_t *buf,
                                           RTE_FLOW_ERROR_TYPE_ACTION,
                                           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,
                                                   RTE_FLOW_ERROR_TYPE_ACTION,
--
2.20.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -   2020-08-06 10:53:16.212439477 +0100
+++ 0011-net-mlx5-fix-flow-items-size-calculation.patch 2020-08-06 10:53:15.728595976 +0100
@@ -1,8 +1,10 @@
-From d13f9760866884d81563624fbf160f3054b70f19 Mon Sep 17 00:00:00 2001
+From e8df8d9adc133f10e896bd7d7ca62ca237222bbb 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.

@@ -13,7 +15,6 @@
 of each item.

 Fixes: 34d41b7aa3bf ("net/mlx5: add VXLAN encap action to Direct Verbs")
-Cc: stable at dpdk.org

 Signed-off-by: Raslan Darawsheh <rasland at mellanox.com>
 Acked-by: Viacheslav Ovsiienko <viacheslavo at mellanox.com>
@@ -22,18 +23,18 @@
  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 f0cc7ad1a..e7f0a12ac 100644
+index bfb27a602..e40cf3c2a 100644
 --- a/drivers/net/mlx5/mlx5_flow_dv.c
 +++ b/drivers/net/mlx5/mlx5_flow_dv.c
-@@ -20,6 +20,7 @@
+@@ -27,6 +27,7 @@
+ #include <rte_ip.h>
+ #include <rte_gre.h>
  #include <rte_vxlan.h>
- #include <rte_gtp.h>
- #include <rte_eal_paging.h>
 +#include <rte_mpls.h>

- #include <mlx5_glue.h>
- #include <mlx5_devx_cmds.h>
-@@ -2866,7 +2867,7 @@ flow_dv_push_vlan_action_resource_register
+ #include "mlx5.h"
+ #include "mlx5_defs.h"
+@@ -2661,7 +2662,7 @@ flow_dv_push_vlan_action_resource_register
         return 0;
  }
  /**
@@ -42,7 +43,7 @@
   *
   * @param[in] item_type
   *   Tested rte_flow_item_type.
-@@ -2875,43 +2876,39 @@ flow_dv_push_vlan_action_resource_register
+@@ -2670,43 +2671,39 @@ flow_dv_push_vlan_action_resource_register
   *   sizeof struct item_type, 0 if void or irrelevant.
   */
  static size_t
@@ -97,7 +98,7 @@
                 break;
         case RTE_FLOW_ITEM_TYPE_VOID: /* Fall through. */
         default:
-@@ -2964,7 +2961,7 @@ flow_dv_convert_encap_data(const struct rte_flow_item *items, uint8_t *buf,
+@@ -2759,7 +2756,7 @@ flow_dv_convert_encap_data(const struct rte_flow_item *items, uint8_t *buf,
                                           RTE_FLOW_ERROR_TYPE_ACTION,
                                           NULL, "invalid empty data");
         for (; items->type != RTE_FLOW_ITEM_TYPE_END; items++) {


More information about the stable mailing list