From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752407AbbJLMog (ORCPT ); Mon, 12 Oct 2015 08:44:36 -0400 Received: from mail2-relais-roc.national.inria.fr ([192.134.164.83]:33068 "EHLO mail2-relais-roc.national.inria.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752380AbbJLMoe (ORCPT ); Mon, 12 Oct 2015 08:44:34 -0400 X-IronPort-AV: E=Sophos;i="5.17,672,1437429600"; d="scan'208";a="182334268" Date: Mon, 12 Oct 2015 14:44:31 +0200 (CEST) From: Julia Lawall X-X-Sender: jll@hadrien To: Krzysztof Kozlowski cc: Liam Girdwood , kernel-janitors@vger.kernel.org, Mark Brown , linux-kernel@vger.kernel.org, Russell King - ARM Linux , Thomas Petazzoni , Andrew Lunn , Bjorn Helgaas , Jason Cooper Subject: Re: [PATCH 4/5] regulator: of: add missing of_node_put In-Reply-To: Message-ID: References: <1444480254-14399-1-git-send-email-Julia.Lawall@lip6.fr> <1444480254-14399-5-git-send-email-Julia.Lawall@lip6.fr> User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 12 Oct 2015, Krzysztof Kozlowski wrote: > 2015-10-10 21:30 GMT+09:00 Julia Lawall : > > > > for_each_child_of_node performs an of_node_get on each iteration, so > > a break out of the loop requires an of_node_put. > > > > The semantic patch that fixes this problem is as follows > > (http://coccinelle.lip6.fr): > > > > // > > @@ > > expression root,e; > > local idexpression child; > > @@ > > > > for_each_child_of_node(root, child) { > > ... when != of_node_put(child) > > when != e = child > > ( > > return child; > > | > > + of_node_put(child); > > ? return ...; > > ) > > ... > > } > > // > > > > Signed-off-by: Julia Lawall > > > > --- > > drivers/regulator/of_regulator.c | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/drivers/regulator/of_regulator.c b/drivers/regulator/of_regulator.c > > index 499e437..f9d77b4 100644 > > --- a/drivers/regulator/of_regulator.c > > +++ b/drivers/regulator/of_regulator.c > > @@ -274,6 +274,7 @@ int of_regulator_match(struct device *dev, struct device_node *node, > > dev_err(dev, > > "failed to parse DT for regulator %s\n", > > child->name); > > + of_node_put(child); > > This looks good. > > > return -EINVAL; > > } > > match->of_node = of_node_get(child); > > But what about 'break' few lines below? The reference from last > of_get_next_child() should be also dropped because... or we should > remove this of_node_get() call. Actually, the break is OK. It's on the inner for loop, not the for_each_child_of_node loop. The for_each_child_of_node will still decrement the reference count in the normal way. julia > How about fixing also usage of for_each_available_child_of_node() in > regulator_of_get_init_data()? > > Best regards, > Krzysztof > -- > To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html >