From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752020AbbJEUZq (ORCPT ); Mon, 5 Oct 2015 16:25:46 -0400 Received: from v094114.home.net.pl ([79.96.170.134]:43042 "HELO v094114.home.net.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1750892AbbJEUZo convert rfc822-to-8bit (ORCPT ); Mon, 5 Oct 2015 16:25:44 -0400 From: "Rafael J. Wysocki" To: Heiko =?ISO-8859-1?Q?St=FCbner?= Cc: Pavel Machek , Stephen Boyd , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] PM / clk: Do not __clk_get passed in clock-references Date: Mon, 05 Oct 2015 22:54:13 +0200 Message-ID: <7126718.0ZHn4yyKKA@vostro.rjw.lan> User-Agent: KMail/4.11.5 (Linux/4.1.0-rc5+; KDE/4.11.5; x86_64; ; ) In-Reply-To: <4072102.uMAk2BYxyL@diego> References: <4072102.uMAk2BYxyL@diego> MIME-Version: 1.0 Content-Transfer-Encoding: 8BIT Content-Type: text/plain; charset="utf-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thursday, October 01, 2015 09:05:09 PM Heiko Stübner wrote: > From: Stephen Boyd > > Clock references are on a per-user basis now, so they are not supposed > to be refcounted by itself anymore. Therefore multiple cascaded get and > put calls will fail. > > When a clock reference gets passed into pm_clk_add_clk we can assume > that the pm clock handling will take control of the clock reference, > so after this functions returns the caller should've given up control > of that handle. > > So remove the additional call to __clk_get() in __pm_clk_add(). > > The only current user of pm_clk_add_clk is drivers/clk/shmobile/clk-mstp.c > which already follows this paradigm by only getting the clock but not > puting it after passing the reference into pm_clk_add_clk. > > In the error case the caller is expected to clean up the clock, as it > may very well try to do something different if pm_clk_add_clk() fails. > > Signed-off-by: Stephen Boyd > [add commit-message] > Signed-off-by: Heiko Stuebner > --- > Hi Rafael, Pavel, > > if that looks acceptable to you, it would be cool if you could ack the > patch and allow me to put it in front of [0] or alternatively > provide a stable-branch I could include. OK Acked-by: Rafael J. Wysocki > [0] https://git.kernel.org/cgit/linux/kernel/git/mmind/linux-rockchip.git/commit/?h=v4.4-armsoc/drivers > > drivers/base/power/clock_ops.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/base/power/clock_ops.c b/drivers/base/power/clock_ops.c > index 652b5a3..6ce7693 100644 > --- a/drivers/base/power/clock_ops.c > +++ b/drivers/base/power/clock_ops.c > @@ -93,7 +93,7 @@ static int __pm_clk_add(struct device *dev, const char *con_id, > return -ENOMEM; > } > } else { > - if (IS_ERR(clk) || !__clk_get(clk)) { > + if (IS_ERR(clk)) { > kfree(ce); > return -ENOENT; > } > @@ -127,7 +127,9 @@ int pm_clk_add(struct device *dev, const char *con_id) > * @clk: Clock pointer > * > * Add the clock to the list of clocks used for the power management of @dev. > - * It will increment refcount on clock pointer, use clk_put() on it when done. > + * The power-management code will take control of the clock reference, so > + * callers should not call clk_put() on @clk after this function sucessfully > + * returned. > */ > int pm_clk_add_clk(struct device *dev, struct clk *clk) > { >