RE: [PATCH v2] of/base: release the node correctly inof_parse_phandle_with_args()

From: Tang Yuantian-B29983
Date: Tue Apr 16 2013 - 02:54:46 EST


Hi Grant.likely,

I really preciate if you can spend some times to review this patch.

Thanks,
Yuantian

> -----Original Message-----
> From: Tang Yuantian-B29983
> Sent: 2013年4月10日 11:37
> To: grant.likely@xxxxxxxxxxxx
> Cc: rob.herring@xxxxxxxxxxx; devicetree-discuss@xxxxxxxxxxxxxxxx; linux-
> kernel@xxxxxxxxxxxxxxx; linuxppc-dev@xxxxxxxxxxxxxxxx; Tang Yuantian-
> B29983; Tang Yuantian-B29983
> Subject: [PATCH v2] of/base: release the node correctly in
> of_parse_phandle_with_args()
>
> From: Tang Yuantian <yuantian.tang@xxxxxxxxxxxxx>
>
> Call of_node_put() only when the out_args is NULL on success, or the
> node's reference count will not be correct because the caller will call
> of_node_put() again.
>
> Signed-off-by: Tang Yuantian <Yuantian.Tang@xxxxxxxxxxxxx>
> ---
> v2:
> - modified the title and description. the 1st patch title is:
> of: remove the unnecessary of_node_put for
> of_parse_phandle_with_args()
> the 1st patch is not good enough.
>
> drivers/of/base.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/of/base.c b/drivers/of/base.c index 321d3ef..ee94f64
> 100644
> --- a/drivers/of/base.c
> +++ b/drivers/of/base.c
> @@ -1158,6 +1158,7 @@ static int __of_parse_phandle_with_args(const
> struct device_node *np,
> if (!phandle)
> goto err;
>
> + /* Found it! return success */
> if (out_args) {
> int i;
> if (WARN_ON(count > MAX_PHANDLE_ARGS)) @@ -
> 1166,11 +1167,10 @@ static int __of_parse_phandle_with_args(const struct
> device_node *np,
> out_args->args_count = count;
> for (i = 0; i < count; i++)
> out_args->args[i] = be32_to_cpup(list++);
> + } else if (node) {
> + of_node_put(node);
> }
>
> - /* Found it! return success */
> - if (node)
> - of_node_put(node);
> return 0;
> }
>
> --
> 1.8.0

N?叉??y??b??千v??藓{.n???{?赙zXФ?塄}?财??j:+v???赙zZ+€?zf"?????i????ア??璀??撷f?^j谦y??@A?囤?0鹅h??i