On Thu, 5 Oct 2023, Vadim Pasternak wrote: > Fix missed resource deallocation in rollback flows. > > Currently if an error occurs after a successful > mlxplat_i2c_main_init(), mlxplat_i2c_main_exit() call is missed in > rollback flow. > Thus, some resources are not de-allocated. > > Move mlxplat_pre_exit() call from mlxplat_remove() into > mlxplat_i2c_main_exit(). > > Call mlxplat_i2c_main_exit() instead of calling mlxplat_pre_exit() in > mlxplat_probe() error handling flow. > > Unregister 'priv->pdev_i2c' device in mlxplat_i2c_main_init() cleanup > flow if this device was successfully registered. > > Fixes: 158cd8320776 ("platform: mellanox: Split logic in init and exit flow") > Reported-by: Christophe JAILLET <christophe.jaillet@xxxxxxxxxx> > Closes: https://lore.kernel.org/lkml/70165032-796e-6f5c-6748-f514e3b9d08c@xxxxxxxxxxxxxxx/T/ > Signed-off-by: Vadim Pasternak <vadimp@xxxxxxxxxx> > --- > drivers/platform/x86/mlx-platform.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/drivers/platform/x86/mlx-platform.c b/drivers/platform/x86/mlx-platform.c > index 3d96dbf79a72..a2ffe4157df1 100644 > --- a/drivers/platform/x86/mlx-platform.c > +++ b/drivers/platform/x86/mlx-platform.c > @@ -6514,6 +6514,7 @@ static int mlxplat_i2c_main_init(struct mlxplat_priv *priv) > return 0; > > fail_mlxplat_i2c_mux_topology_init: > + platform_device_unregister(priv->pdev_i2c); > fail_platform_i2c_register: > fail_mlxplat_mlxcpld_verify_bus_topology: > return err; > @@ -6521,6 +6522,7 @@ static int mlxplat_i2c_main_init(struct mlxplat_priv *priv) > > static void mlxplat_i2c_main_exit(struct mlxplat_priv *priv) > { > + mlxplat_pre_exit(priv); > mlxplat_i2c_mux_topology_exit(priv); > if (priv->pdev_i2c) > platform_device_unregister(priv->pdev_i2c); > @@ -6597,7 +6599,7 @@ static int mlxplat_probe(struct platform_device *pdev) > > fail_register_reboot_notifier: > fail_regcache_sync: > - mlxplat_pre_exit(priv); > + mlxplat_i2c_main_exit(priv); > fail_mlxplat_i2c_main_init: > fail_regmap_write: > fail_alloc: > @@ -6614,7 +6616,6 @@ static int mlxplat_remove(struct platform_device *pdev) > pm_power_off = NULL; > if (mlxplat_reboot_nb) > unregister_reboot_notifier(mlxplat_reboot_nb); > - mlxplat_pre_exit(priv); > mlxplat_i2c_main_exit(priv); > mlxplat_post_exit(); > return 0; > Thanks, Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@xxxxxxxxxxxxxxx> -- i.