Blame SOURCES/0198-netdrv-net-mlx5e-Fix-nest_level-for-vlan-pop-action.patch

d8f823
From 4e68ad174a7731f7ecb6d6ee2d02af52f2f8eb80 Mon Sep 17 00:00:00 2001
d8f823
From: Alaa Hleihel <ahleihel@redhat.com>
d8f823
Date: Tue, 12 May 2020 10:55:14 -0400
d8f823
Subject: [PATCH 198/312] [netdrv] net/mlx5e: Fix nest_level for vlan pop
d8f823
 action
d8f823
d8f823
Message-id: <20200512105530.4207-109-ahleihel@redhat.com>
d8f823
Patchwork-id: 306980
d8f823
Patchwork-instance: patchwork
d8f823
O-Subject: [RHEL8.3 BZ 1789382 108/124] net/mlx5e: Fix nest_level for vlan pop action
d8f823
Bugzilla: 1789382
d8f823
RH-Acked-by: Tony Camuso <tcamuso@redhat.com>
d8f823
RH-Acked-by: Kamal Heib <kheib@redhat.com>
d8f823
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
d8f823
d8f823
Bugzilla: http://bugzilla.redhat.com/1789382
d8f823
Upstream: v5.7-rc2
d8f823
d8f823
commit 70f478ca085deec4d6c1f187f773f5827ddce7e8
d8f823
Author: Dmytro Linkin <dmitrolin@mellanox.com>
d8f823
Date:   Wed Apr 1 14:41:27 2020 +0300
d8f823
d8f823
    net/mlx5e: Fix nest_level for vlan pop action
d8f823
d8f823
    Current value of nest_level, assigned from net_device lower_level value,
d8f823
    does not reflect the actual number of vlan headers, needed to pop.
d8f823
    For ex., if we have untagged ingress traffic sended over vlan devices,
d8f823
    instead of one pop action, driver will perform two pop actions.
d8f823
    To fix that, calculate nest_level as difference between vlan device and
d8f823
    parent device lower_levels.
d8f823
d8f823
    Fixes: f3b0a18bb6cb ("net: remove unnecessary variables and callback")
d8f823
    Signed-off-by: Dmytro Linkin <dmitrolin@mellanox.com>
d8f823
    Signed-off-by: Roi Dayan <roid@mellanox.com>
d8f823
    Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
d8f823
d8f823
Signed-off-by: Alaa Hleihel <ahleihel@redhat.com>
d8f823
Signed-off-by: Frantisek Hrbata <fhrbata@redhat.com>
d8f823
---
d8f823
 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 5 +++--
d8f823
 1 file changed, 3 insertions(+), 2 deletions(-)
d8f823
d8f823
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
d8f823
index c455f73cd54e..3461aec49d9e 100644
d8f823
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
d8f823
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
d8f823
@@ -3257,12 +3257,13 @@ static int add_vlan_pop_action(struct mlx5e_priv *priv,
d8f823
 			       struct mlx5_esw_flow_attr *attr,
d8f823
 			       u32 *action)
d8f823
 {
d8f823
-	int nest_level = vlan_get_encap_level(attr->parse_attr->filter_dev);
d8f823
 	struct flow_action_entry vlan_act = {
d8f823
 		.id = FLOW_ACTION_VLAN_POP,
d8f823
 	};
d8f823
-	int err = 0;
d8f823
+	int nest_level, err = 0;
d8f823
 
d8f823
+	nest_level = vlan_get_encap_level(attr->parse_attr->filter_dev) -
d8f823
+				       vlan_get_encap_level(priv->netdev);
d8f823
 	while (nest_level--) {
d8f823
 		err = parse_tc_vlan_action(priv, &vlan_act, attr, action);
d8f823
 		if (err)
d8f823
-- 
d8f823
2.13.6
d8f823