Re: [PATCH] mfd: twl-core: One function call less in add_numbered_child() after error detection

From: Lee Jones
Date: Mon Jan 11 2016 - 03:29:31 EST


On Tue, 29 Dec 2015, SF Markus Elfring wrote:

> From: Markus Elfring <elfring@xxxxxxxxxxxxxxxxxxxxx>
> Date: Tue, 29 Dec 2015 19:29:08 +0100
>
> The platform_device_put() function was called in one case by the
> add_numbered_child() function during error handling even if the passed
> variable "pdev" contained a null pointer.
>
> Implementation details could be improved by the adjustment of jump targets
> according to the Linux coding style convention.
>
> This issue was detected by using the Coccinelle software.
>
> Signed-off-by: Markus Elfring <elfring@xxxxxxxxxxxxxxxxxxxxx>
> ---
> drivers/mfd/twl-core.c | 21 ++++++++++-----------
> 1 file changed, 10 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c
> index 831696e..0d9350c 100644
> --- a/drivers/mfd/twl-core.c
> +++ b/drivers/mfd/twl-core.c
> @@ -625,7 +625,7 @@ add_numbered_child(unsigned mod_no, const char *name, int num,
> if (!pdev) {
> dev_dbg(&twl->client->dev, "can't alloc dev\n");

Change this to be dev_err()

> status = -ENOMEM;
> - goto err;
> + goto report_failure;

... and just return status from here.

> }
>
> pdev->dev.parent = &twl->client->dev;
> @@ -634,7 +634,7 @@ add_numbered_child(unsigned mod_no, const char *name, int num,
> status = platform_device_add_data(pdev, pdata, pdata_len);
> if (status < 0) {
> dev_dbg(&pdev->dev, "can't add platform_data\n");
> - goto err;
> + goto put_device;
> }
> }
>
> @@ -647,21 +647,20 @@ add_numbered_child(unsigned mod_no, const char *name, int num,
> status = platform_device_add_resources(pdev, r, irq1 ? 2 : 1);
> if (status < 0) {
> dev_dbg(&pdev->dev, "can't add irqs\n");
> - goto err;
> + goto put_device;
> }
> }
>
> status = platform_device_add(pdev);
> - if (status == 0)
> + if (!status) {

You've changed the way you handle errors from this point. To be more
consistent it would be better if you checked for status, then jump to
put_device in the case of a failure, as you do above.

> device_init_wakeup(&pdev->dev, can_wakeup);
> -
> -err:
> - if (status < 0) {
> - platform_device_put(pdev);
> - dev_err(&twl->client->dev, "can't add %s dev\n", name);
> - return ERR_PTR(status);
> + return &pdev->dev;
> }
> - return &pdev->dev;
> +put_device:
> + platform_device_put(pdev);
> +report_failure:
> + dev_err(&twl->client->dev, "can't add %s dev\n", name);
> + return ERR_PTR(status);
> }
>
> static inline struct device *add_child(unsigned mod_no, const char *name,

--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org â Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog