| From foo@baz Sat 18 Apr 2020 11:09:57 AM CEST |
| From: Dmytro Linkin <dmitrolin@mellanox.com> |
| Date: Wed, 1 Apr 2020 14:41:27 +0300 |
| Subject: net/mlx5e: Fix nest_level for vlan pop action |
| |
| From: Dmytro Linkin <dmitrolin@mellanox.com> |
| |
| [ Upstream commit 70f478ca085deec4d6c1f187f773f5827ddce7e8 ] |
| |
| Current value of nest_level, assigned from net_device lower_level value, |
| does not reflect the actual number of vlan headers, needed to pop. |
| For ex., if we have untagged ingress traffic sended over vlan devices, |
| instead of one pop action, driver will perform two pop actions. |
| To fix that, calculate nest_level as difference between vlan device and |
| parent device lower_levels. |
| |
| Fixes: f3b0a18bb6cb ("net: remove unnecessary variables and callback") |
| Signed-off-by: Dmytro Linkin <dmitrolin@mellanox.com> |
| Signed-off-by: Roi Dayan <roid@mellanox.com> |
| Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 5 +++-- |
| 1 file changed, 3 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c |
| +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c |
| @@ -3181,12 +3181,13 @@ static int add_vlan_pop_action(struct ml |
| struct mlx5_esw_flow_attr *attr, |
| u32 *action) |
| { |
| - int nest_level = attr->parse_attr->filter_dev->lower_level; |
| struct flow_action_entry vlan_act = { |
| .id = FLOW_ACTION_VLAN_POP, |
| }; |
| - int err = 0; |
| + int nest_level, err = 0; |
| |
| + nest_level = attr->parse_attr->filter_dev->lower_level - |
| + priv->netdev->lower_level; |
| while (nest_level--) { |
| err = parse_tc_vlan_action(priv, &vlan_act, attr, action); |
| if (err) |