2022-11-03 07:44:28

by Yang Yingliang

[permalink] [raw]
Subject: [PATCH 2/2] firmware: stratix10-svc: fix error handle while alloc/add device failed

If add device "stratix10-rsu" failed in stratix10_svc_drv_probe(),
the 'svc_fifo' and 'genpool' need be freed in the error path.

If allocate or add device "intel-fcs" failed in stratix10_svc_drv_probe(),
the device "stratix10-rsu" need be unregistered in the error path.

Fixes: e6281c26674e ("firmware: stratix10-svc: Add support for FCS")
Signed-off-by: Yang Yingliang <[email protected]>
---
drivers/firmware/stratix10-svc.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/firmware/stratix10-svc.c b/drivers/firmware/stratix10-svc.c
index 1a5640b3ab42..bde1f543f529 100644
--- a/drivers/firmware/stratix10-svc.c
+++ b/drivers/firmware/stratix10-svc.c
@@ -1202,19 +1202,20 @@ static int stratix10_svc_drv_probe(struct platform_device *pdev)
ret = platform_device_add(svc->stratix10_svc_rsu);
if (ret) {
platform_device_put(svc->stratix10_svc_rsu);
- return ret;
+ goto err_free_kfifo;
}

svc->intel_svc_fcs = platform_device_alloc(INTEL_FCS, 1);
if (!svc->intel_svc_fcs) {
dev_err(dev, "failed to allocate %s device\n", INTEL_FCS);
- return -ENOMEM;
+ ret = -ENOMEM;
+ goto err_unregister_dev;
}

ret = platform_device_add(svc->intel_svc_fcs);
if (ret) {
platform_device_put(svc->intel_svc_fcs);
- return ret;
+ goto err_unregister_dev;
}

dev_set_drvdata(dev, svc);
@@ -1223,6 +1224,8 @@ static int stratix10_svc_drv_probe(struct platform_device *pdev)

return 0;

+err_unregister_dev:
+ platform_device_unregister(svc->stratix10_svc_rsu);
err_free_kfifo:
kfifo_free(&controller->svc_fifo);
err_destroy_pool:
--
2.25.1



2022-11-07 21:05:07

by Dinh Nguyen

[permalink] [raw]
Subject: Re: [PATCH 2/2] firmware: stratix10-svc: fix error handle while alloc/add device failed



On 11/3/22 02:09, Yang Yingliang wrote:
> If add device "stratix10-rsu" failed in stratix10_svc_drv_probe(),
> the 'svc_fifo' and 'genpool' need be freed in the error path.
>
> If allocate or add device "intel-fcs" failed in stratix10_svc_drv_probe(),
> the device "stratix10-rsu" need be unregistered in the error path.
>
> Fixes: e6281c26674e ("firmware: stratix10-svc: Add support for FCS")
> Signed-off-by: Yang Yingliang <[email protected]>
> ---
> drivers/firmware/stratix10-svc.c | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/firmware/stratix10-svc.c b/drivers/firmware/stratix10-svc.c
> index 1a5640b3ab42..bde1f543f529 100644
> --- a/drivers/firmware/stratix10-svc.c
> +++ b/drivers/firmware/stratix10-svc.c
> @@ -1202,19 +1202,20 @@ static int stratix10_svc_drv_probe(struct platform_device *pdev)
> ret = platform_device_add(svc->stratix10_svc_rsu);
> if (ret) {
> platform_device_put(svc->stratix10_svc_rsu);
> - return ret;
> + goto err_free_kfifo;
> }
>
> svc->intel_svc_fcs = platform_device_alloc(INTEL_FCS, 1);
> if (!svc->intel_svc_fcs) {
> dev_err(dev, "failed to allocate %s device\n", INTEL_FCS);
> - return -ENOMEM;
> + ret = -ENOMEM;
> + goto err_unregister_dev;
> }
>
> ret = platform_device_add(svc->intel_svc_fcs);
> if (ret) {
> platform_device_put(svc->intel_svc_fcs);
> - return ret;
> + goto err_unregister_dev;
> }
>
> dev_set_drvdata(dev, svc);
> @@ -1223,6 +1224,8 @@ static int stratix10_svc_drv_probe(struct platform_device *pdev)
>
> return 0;
>
> +err_unregister_dev:
> + platform_device_unregister(svc->stratix10_svc_rsu);
> err_free_kfifo:
> kfifo_free(&controller->svc_fifo);
> err_destroy_pool:

Acked-by: Dinh Nguyen <[email protected]>