| From foo@baz Thu 08 Aug 2019 09:48:28 AM CEST |
| From: Mark Zhang <markz@mellanox.com> |
| Date: Tue, 9 Jul 2019 05:37:12 +0300 |
| Subject: net/mlx5: Use reversed order when unregister devices |
| |
| From: Mark Zhang <markz@mellanox.com> |
| |
| [ Upstream commit 08aa5e7da6bce1a1963f63cf32c2e7ad434ad578 ] |
| |
| When lag is active, which is controlled by the bonded mlx5e netdev, mlx5 |
| interface unregestering must happen in the reverse order where rdma is |
| unregistered (unloaded) first, to guarantee all references to the lag |
| context in hardware is removed, then remove mlx5e netdev interface which |
| will cleanup the lag context from hardware. |
| |
| Without this fix during destroy of LAG interface, we observed following |
| errors: |
| * mlx5_cmd_check:752:(pid 12556): DESTROY_LAG(0x843) op_mod(0x0) failed, |
| status bad parameter(0x3), syndrome (0xe4ac33) |
| * mlx5_cmd_check:752:(pid 12556): DESTROY_LAG(0x843) op_mod(0x0) failed, |
| status bad parameter(0x3), syndrome (0xa5aee8). |
| |
| Fixes: a31208b1e11d ("net/mlx5_core: New init and exit flow for mlx5_core") |
| Reviewed-by: Parav Pandit <parav@mellanox.com> |
| Reviewed-by: Leon Romanovsky <leonro@mellanox.com> |
| Signed-off-by: Mark Zhang <markz@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/main.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c |
| +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c |
| @@ -778,7 +778,7 @@ static void mlx5_unregister_device(struc |
| struct mlx5_interface *intf; |
| |
| mutex_lock(&intf_mutex); |
| - list_for_each_entry(intf, &intf_list, list) |
| + list_for_each_entry_reverse(intf, &intf_list, list) |
| mlx5_remove_device(intf, priv); |
| list_del(&priv->dev_list); |
| mutex_unlock(&intf_mutex); |