lkml.org 
[lkml]   [2020]   [Oct]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.8 091/124] net/mlx5e: Fix VLAN cleanup flow
    Date
    From: Aya Levin <ayal@nvidia.com>

    [ Upstream commit 8c7353b6f716436ad0bfda2b5c5524ab2dde5894 ]

    Prior to this patch unloading an interface in promiscuous mode with RX
    VLAN filtering feature turned off - resulted in a warning. This is due
    to a wrong condition in the VLAN rules cleanup flow, which left the
    any-vid rules in the VLAN steering table. These rules prevented
    destroying the flow group and the flow table.

    The any-vid rules are removed in 2 flows, but none of them remove it in
    case both promiscuous is set and VLAN filtering is off. Fix the issue by
    changing the condition of the VLAN table cleanup flow to clean also in
    case of promiscuous mode.

    mlx5_core 0000:00:08.0: mlx5_destroy_flow_group:2123:(pid 28729): Flow group 20 wasn't destroyed, refcount > 1
    mlx5_core 0000:00:08.0: mlx5_destroy_flow_group:2123:(pid 28729): Flow group 19 wasn't destroyed, refcount > 1
    mlx5_core 0000:00:08.0: mlx5_destroy_flow_table:2112:(pid 28729): Flow table 262149 wasn't destroyed, refcount > 1
    ...
    ...
    ------------[ cut here ]------------
    FW pages counter is 11560 after reclaiming all pages
    WARNING: CPU: 1 PID: 28729 at
    drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c:660
    mlx5_reclaim_startup_pages+0x178/0x230 [mlx5_core]
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS
    rel-1.12.1-0-ga5cab58e9a3f-prebuilt.qemu.org 04/01/2014
    Call Trace:
    mlx5_function_teardown+0x2f/0x90 [mlx5_core]
    mlx5_unload_one+0x71/0x110 [mlx5_core]
    remove_one+0x44/0x80 [mlx5_core]
    pci_device_remove+0x3e/0xc0
    device_release_driver_internal+0xfb/0x1c0
    device_release_driver+0x12/0x20
    pci_stop_bus_device+0x68/0x90
    pci_stop_and_remove_bus_device+0x12/0x20
    hv_eject_device_work+0x6f/0x170 [pci_hyperv]
    ? __schedule+0x349/0x790
    process_one_work+0x206/0x400
    worker_thread+0x34/0x3f0
    ? process_one_work+0x400/0x400
    kthread+0x126/0x140
    ? kthread_park+0x90/0x90
    ret_from_fork+0x22/0x30
    ---[ end trace 6283bde8d26170dc ]---

    Fixes: 9df30601c843 ("net/mlx5e: Restore vlan filter after seamless reset")
    Signed-off-by: Aya Levin <ayal@nvidia.com>
    Reviewed-by: Moshe Shemesh <moshe@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/mellanox/mlx5/core/en_fs.c | 8 ++++++--
    1 file changed, 6 insertions(+), 2 deletions(-)

    diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_fs.c b/drivers/net/ethernet/mellanox/mlx5/core/en_fs.c
    index 73d3dc07331f1..c5be0cdfaf0fa 100644
    --- a/drivers/net/ethernet/mellanox/mlx5/core/en_fs.c
    +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_fs.c
    @@ -415,8 +415,12 @@ static void mlx5e_del_vlan_rules(struct mlx5e_priv *priv)
    for_each_set_bit(i, priv->fs.vlan.active_svlans, VLAN_N_VID)
    mlx5e_del_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_MATCH_STAG_VID, i);

    - if (priv->fs.vlan.cvlan_filter_disabled &&
    - !(priv->netdev->flags & IFF_PROMISC))
    + WARN_ON_ONCE(!(test_bit(MLX5E_STATE_DESTROYING, &priv->state)));
    +
    + /* must be called after DESTROY bit is set and
    + * set_rx_mode is called and flushed
    + */
    + if (priv->fs.vlan.cvlan_filter_disabled)
    mlx5e_del_any_vid_rules(priv);
    }

    --
    2.25.1


    \
     
     \ /
      Last update: 2020-10-12 15:50    [W:4.209 / U:0.096 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site