]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net/mlx5e: Fix error flow in representor failing to add vport rx rule
authorRoi Dayan <roid@nvidia.com>
Wed, 29 Mar 2023 12:24:32 +0000 (15:24 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 11 May 2023 14:11:18 +0000 (23:11 +0900)
[ Upstream commit 0a6b069cc60d68d33b4f6e7dd7f1adc3ec749766 ]

On representor init rx error flow the flow steering pointer is being
released so mlx5e_attach_netdev() doesn't have a valid fs pointer
in its error flow. Make sure the pointer is nullified when released
and add a check in mlx5e_fs_cleanup() to verify fs is not null
as representor cleanup callback would be called anyway.

Fixes: af8bbf730068 ("net/mlx5e: Convert mlx5e_flow_steering member of mlx5e_priv to pointer")
Signed-off-by: Roi Dayan <roid@nvidia.com>
Reviewed-by: Maor Dickman <maord@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
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c

index 7cd36f4ac3efc8685f35ca41279c9fe195bd8e2f..edbe22d93c992e35d29bb111cf47e2d3863287a3 100644 (file)
@@ -1471,6 +1471,8 @@ err:
 
 void mlx5e_fs_cleanup(struct mlx5e_flow_steering *fs)
 {
+       if (!fs)
+               return;
        mlx5e_fs_ethtool_free(fs);
        mlx5e_fs_tc_free(fs);
        mlx5e_fs_vlan_free(fs);
index 1f4233b2842f73d2d48bb2b03b5d2f737f69a1f3..53eba076c53fc08c7958a17eedfce506972de620 100644 (file)
@@ -5208,6 +5208,7 @@ static void mlx5e_nic_cleanup(struct mlx5e_priv *priv)
        mlx5e_health_destroy_reporters(priv);
        mlx5e_ktls_cleanup(priv);
        mlx5e_fs_cleanup(priv->fs);
+       priv->fs = NULL;
 }
 
 static int mlx5e_init_nic_rx(struct mlx5e_priv *priv)
index 301a734b7c6a70cd8d21105bf3d4b76278449a29..21426decc4bde1cbeac2fc125fb813325ec39156 100644 (file)
@@ -822,6 +822,7 @@ static int mlx5e_init_ul_rep(struct mlx5_core_dev *mdev,
 static void mlx5e_cleanup_rep(struct mlx5e_priv *priv)
 {
        mlx5e_fs_cleanup(priv->fs);
+       priv->fs = NULL;
 }
 
 static int mlx5e_create_rep_ttc_table(struct mlx5e_priv *priv)
@@ -988,6 +989,7 @@ err_close_drop_rq:
        priv->rx_res = NULL;
 err_free_fs:
        mlx5e_fs_cleanup(priv->fs);
+       priv->fs = NULL;
        return err;
 }