2021-06-14 20:37:16

by Andy Shevchenko

[permalink] [raw]
Subject: [PATCH v1 1/1] platform/chrome: cros_ec_typec: Put fwnode in error case during ->probe()

device_for_each_child_node() bumps a reference counting of a returned variable.
We have to balance it whenever we return to the caller.

Fixes: fdc6b21e2444 ("platform/chrome: Add Type C connector class driver")
Cc: Prashant Malani <[email protected]>
Signed-off-by: Andy Shevchenko <[email protected]>
---
drivers/platform/chrome/cros_ec_typec.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/platform/chrome/cros_ec_typec.c b/drivers/platform/chrome/cros_ec_typec.c
index 27c068c4c38d..fb03c22fa34d 100644
--- a/drivers/platform/chrome/cros_ec_typec.c
+++ b/drivers/platform/chrome/cros_ec_typec.c
@@ -375,6 +375,7 @@ static int cros_typec_init_ports(struct cros_typec_data *typec)
return 0;

unregister_ports:
+ fwnode_handle_put(fwnode);
cros_unregister_ports(typec);
return ret;
}
--
2.32.0


2021-06-14 21:38:44

by Prashant Malani

[permalink] [raw]
Subject: Re: [PATCH v1 1/1] platform/chrome: cros_ec_typec: Put fwnode in error case during ->probe()

Hi Andy,

On Mon, Jun 14, 2021 at 11:33:10PM +0300, Andy Shevchenko wrote:
> device_for_each_child_node() bumps a reference counting of a returned variable.
> We have to balance it whenever we return to the caller.
>
> Fixes: fdc6b21e2444 ("platform/chrome: Add Type C connector class driver")
> Cc: Prashant Malani <[email protected]>
> Signed-off-by: Andy Shevchenko <[email protected]>

Minor nit, but regardless of that:
Reviewed-by: Prashant Malani <[email protected]>

> ---
> drivers/platform/chrome/cros_ec_typec.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/platform/chrome/cros_ec_typec.c b/drivers/platform/chrome/cros_ec_typec.c
> index 27c068c4c38d..fb03c22fa34d 100644
> --- a/drivers/platform/chrome/cros_ec_typec.c
> +++ b/drivers/platform/chrome/cros_ec_typec.c
> @@ -375,6 +375,7 @@ static int cros_typec_init_ports(struct cros_typec_data *typec)
> return 0;
>
> unregister_ports:
> + fwnode_handle_put(fwnode);

It reads better to have this at the location where the goto's are called, but
there are several of them. Instead, can you add a 1-line comment explaining that
the reference is left over? It isn't clear even by going a few calls down the
stack of device_for_each_child_node().


Best regards,

-Prashant