Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 35bff23a authored by Yang Yingliang's avatar Yang Yingliang Committed by Greg Kroah-Hartman
Browse files

hwmon: (ibmaem) don't call platform_device_del() if platform_device_add() fails



[ Upstream commit d0e51022a025ca5350fafb8e413a6fe5d4baf833 ]

If platform_device_add() fails, it no need to call platform_device_del(), split
platform_device_unregister() into platform_device_del/put(), so platform_device_put()
can be called separately.

Fixes: 8808a793 ("ibmaem: new driver for power/energy/temp meters in IBM System X hardware")
Reported-by: default avatarHulk Robot <hulkci@huawei.com>
Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
Link: https://lore.kernel.org/r/20220701074153.4021556-1-yangyingliang@huawei.com


Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 36cd49b0
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -563,7 +563,7 @@ static int aem_init_aem1_inst(struct aem_ipmi_data *probe, u8 module_handle)

	res = platform_device_add(data->pdev);
	if (res)
		goto ipmi_err;
		goto dev_add_err;

	platform_set_drvdata(data->pdev, data);

@@ -611,7 +611,9 @@ static int aem_init_aem1_inst(struct aem_ipmi_data *probe, u8 module_handle)
	ipmi_destroy_user(data->ipmi.user);
ipmi_err:
	platform_set_drvdata(data->pdev, NULL);
	platform_device_unregister(data->pdev);
	platform_device_del(data->pdev);
dev_add_err:
	platform_device_put(data->pdev);
dev_err:
	ida_simple_remove(&aem_ida, data->id);
id_err:
@@ -703,7 +705,7 @@ static int aem_init_aem2_inst(struct aem_ipmi_data *probe,

	res = platform_device_add(data->pdev);
	if (res)
		goto ipmi_err;
		goto dev_add_err;

	platform_set_drvdata(data->pdev, data);

@@ -751,7 +753,9 @@ static int aem_init_aem2_inst(struct aem_ipmi_data *probe,
	ipmi_destroy_user(data->ipmi.user);
ipmi_err:
	platform_set_drvdata(data->pdev, NULL);
	platform_device_unregister(data->pdev);
	platform_device_del(data->pdev);
dev_add_err:
	platform_device_put(data->pdev);
dev_err:
	ida_simple_remove(&aem_ida, data->id);
id_err: