Message ID | 955a0ebca11c8e41470e37ec2eb2a3bbcd77bbe5.1627911426.git.leonro@nvidia.com |
---|---|
State | New |
Headers | show |
Series | [net] net/mlx5: Don't skip subfunction cleanup in case of error in module init | expand |
> From: Leon Romanovsky <leon@kernel.org> > Sent: Monday, August 2, 2021 7:10 PM > From: Leon Romanovsky <leonro@nvidia.com> > > Clean SF resources if mlx5 eth failed to initialize. > > Fixes: 1958fc2f0712 ("net/mlx5: SF, Add auxiliary device driver") > Signed-off-by: Leon Romanovsky <leonro@nvidia.com> > --- > drivers/net/ethernet/mellanox/mlx5/core/main.c | 12 ++++-------- > drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h | 5 +++++ > 2 files changed, 9 insertions(+), 8 deletions(-) > > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c > b/drivers/net/ethernet/mellanox/mlx5/core/main.c > index eb1b316560a8..c84ad87c99bb 100644 > --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c > +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c > @@ -1784,16 +1784,14 @@ static int __init init(void) > if (err) > goto err_sf; > > -#ifdef CONFIG_MLX5_CORE_EN > err = mlx5e_init(); > - if (err) { > - pci_unregister_driver(&mlx5_core_driver); > - goto err_debug; > - } > -#endif > + if (err) > + goto err_en; > > return 0; > > +err_en: > + mlx5_sf_driver_unregister(); > err_sf: > pci_unregister_driver(&mlx5_core_driver); > err_debug: > @@ -1803,9 +1801,7 @@ static int __init init(void) > > static void __exit cleanup(void) > { > -#ifdef CONFIG_MLX5_CORE_EN > mlx5e_cleanup(); > -#endif > mlx5_sf_driver_unregister(); > pci_unregister_driver(&mlx5_core_driver); > mlx5_unregister_debugfs(); > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h > b/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h > index 343807ac2036..da365b8f0141 100644 > --- a/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h > +++ b/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h > @@ -206,8 +206,13 @@ int mlx5_firmware_flash(struct mlx5_core_dev > *dev, const struct firmware *fw, int mlx5_fw_version_query(struct > mlx5_core_dev *dev, > u32 *running_ver, u32 *stored_ver); > > +#ifdef CONFIG_MLX5_CORE_EN > int mlx5e_init(void); > void mlx5e_cleanup(void); > +#else > +static inline int mlx5e_init(void){ return 0; } static inline void > +mlx5e_cleanup(void){} #endif > mlx5e_*() functionality is provided by core/en.h and core/en_main.c So above declaration should come from en_main.h, instead of mlx5_core.h, but we don't have en_main.h currently. Including en.h is too much given rest of the other declarations in it. So for net fix, this is ok, for net-next en.h should be improved and above declaration should move to en_main.h. Reviewed-by: Parav Pandit <parav@nvidia.com>
On Mon, 2021-08-02 at 16:39 +0300, Leon Romanovsky wrote: > From: Leon Romanovsky <leonro@nvidia.com> > > Clean SF resources if mlx5 eth failed to initialize. > > Fixes: 1958fc2f0712 ("net/mlx5: SF, Add auxiliary device driver") > Signed-off-by: Leon Romanovsky <leonro@nvidia.com> > --- applied to net-mlx5
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c index eb1b316560a8..c84ad87c99bb 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c @@ -1784,16 +1784,14 @@ static int __init init(void) if (err) goto err_sf; -#ifdef CONFIG_MLX5_CORE_EN err = mlx5e_init(); - if (err) { - pci_unregister_driver(&mlx5_core_driver); - goto err_debug; - } -#endif + if (err) + goto err_en; return 0; +err_en: + mlx5_sf_driver_unregister(); err_sf: pci_unregister_driver(&mlx5_core_driver); err_debug: @@ -1803,9 +1801,7 @@ static int __init init(void) static void __exit cleanup(void) { -#ifdef CONFIG_MLX5_CORE_EN mlx5e_cleanup(); -#endif mlx5_sf_driver_unregister(); pci_unregister_driver(&mlx5_core_driver); mlx5_unregister_debugfs(); diff --git a/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h b/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h index 343807ac2036..da365b8f0141 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h @@ -206,8 +206,13 @@ int mlx5_firmware_flash(struct mlx5_core_dev *dev, const struct firmware *fw, int mlx5_fw_version_query(struct mlx5_core_dev *dev, u32 *running_ver, u32 *stored_ver); +#ifdef CONFIG_MLX5_CORE_EN int mlx5e_init(void); void mlx5e_cleanup(void); +#else +static inline int mlx5e_init(void){ return 0; } +static inline void mlx5e_cleanup(void){} +#endif static inline bool mlx5_sriov_is_enabled(struct mlx5_core_dev *dev) {