Message ID | 20231005075616.42777-2-vadimp@nvidia.com (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Ilpo Järvinen |
Headers | show |
Series | platform/x86: Add fixes and amendments for init()/exit() flows | expand |
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@wanadoo.fr> > Closes: https://lore.kernel.org/lkml/70165032-796e-6f5c-6748-f514e3b9d08c@linux.intel.com/T/ > Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> > --- > 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@linux.intel.com>
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;
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@wanadoo.fr> Closes: https://lore.kernel.org/lkml/70165032-796e-6f5c-6748-f514e3b9d08c@linux.intel.com/T/ Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> --- drivers/platform/x86/mlx-platform.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)