From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7E909C43460 for ; Mon, 10 May 2021 17:04:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 45B1360FE3 for ; Mon, 10 May 2021 17:04:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232371AbhEJRFc convert rfc822-to-8bit (ORCPT ); Mon, 10 May 2021 13:05:32 -0400 Received: from frasgout.his.huawei.com ([185.176.79.56]:3051 "EHLO frasgout.his.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232316AbhEJRE5 (ORCPT ); Mon, 10 May 2021 13:04:57 -0400 Received: from fraeml715-chm.china.huawei.com (unknown [172.18.147.226]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4Ff6gN1SSkz6rnFt; Tue, 11 May 2021 00:57:52 +0800 (CST) Received: from lhreml710-chm.china.huawei.com (10.201.108.61) by fraeml715-chm.china.huawei.com (10.206.15.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2; Mon, 10 May 2021 19:03:48 +0200 Received: from localhost (10.52.123.16) by lhreml710-chm.china.huawei.com (10.201.108.61) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2; Mon, 10 May 2021 18:03:47 +0100 Date: Mon, 10 May 2021 18:02:05 +0100 From: Jonathan Cameron To: Uwe =?ISO-8859-1?Q?Kleine-K=F6nig?= CC: Michael Turquette , Stephen Boyd , , , Alexandre Belloni , Alessandro Zummo , Mark Brown , Claudiu Beznea , Wolfram Sang , "Oleksij Rempel" , Ludovic Desroches , Thierry Reding , , Andrew Morton , , Lee Jones , , Subject: Re: [PATCH v6 RESEND 1/6] clk: generalize devm_clk_get() a bit Message-ID: <20210510180205.000004dd@Huawei.com> In-Reply-To: <20210510061724.940447-2-u.kleine-koenig@pengutronix.de> References: <20210510061724.940447-1-u.kleine-koenig@pengutronix.de> <20210510061724.940447-2-u.kleine-koenig@pengutronix.de> Organization: Huawei Technologies Research and Development (UK) Ltd. X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.33; i686-w64-mingw32) MIME-Version: 1.0 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 8BIT X-Originating-IP: [10.52.123.16] X-ClientProxiedBy: lhreml720-chm.china.huawei.com (10.201.108.71) To lhreml710-chm.china.huawei.com (10.201.108.61) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-rtc@vger.kernel.org On Mon, 10 May 2021 08:17:19 +0200 Uwe Kleine-König wrote: > Allow to add an exit hook to devm managed clocks. Also use > clk_get_optional() in devm_clk_get_optional instead of open coding it. > The generalisation will be used in the next commit to add some more > devm_clk helpers. > > Signed-off-by: Uwe Kleine-König If feels marginally odd to register cleanup that we know won't do anything for the optional case, but it works as far as I can tell and it would be a little fiddly to special case it. FWIW Reviewed-by: Jonathan Cameron > --- > drivers/clk/clk-devres.c | 67 ++++++++++++++++++++++++++++++---------- > 1 file changed, 50 insertions(+), 17 deletions(-) > > diff --git a/drivers/clk/clk-devres.c b/drivers/clk/clk-devres.c > index be160764911b..91c995815b57 100644 > --- a/drivers/clk/clk-devres.c > +++ b/drivers/clk/clk-devres.c > @@ -4,39 +4,72 @@ > #include > #include > > +struct devm_clk_state { > + struct clk *clk; > + void (*exit)(struct clk *clk); > +}; > + > static void devm_clk_release(struct device *dev, void *res) > { > - clk_put(*(struct clk **)res); > + struct devm_clk_state *state = *(struct devm_clk_state **)res; > + > + if (state->exit) > + state->exit(state->clk); > + > + clk_put(state->clk); > } > > -struct clk *devm_clk_get(struct device *dev, const char *id) > +static struct clk *__devm_clk_get(struct device *dev, const char *id, > + struct clk *(*get)(struct device *dev, const char *id), > + int (*init)(struct clk *clk), > + void (*exit)(struct clk *clk)) > { > - struct clk **ptr, *clk; > + struct devm_clk_state *state; > + struct clk *clk; > + int ret; > > - ptr = devres_alloc(devm_clk_release, sizeof(*ptr), GFP_KERNEL); > - if (!ptr) > + state = devres_alloc(devm_clk_release, sizeof(*state), GFP_KERNEL); > + if (!state) > return ERR_PTR(-ENOMEM); > > - clk = clk_get(dev, id); > - if (!IS_ERR(clk)) { > - *ptr = clk; > - devres_add(dev, ptr); > - } else { > - devres_free(ptr); > + clk = get(dev, id); > + if (IS_ERR(clk)) { > + ret = PTR_ERR(clk); > + goto err_clk_get; > } > > + if (init) { > + ret = init(clk); > + if (ret) > + goto err_clk_init; > + } > + > + state->clk = clk; > + state->exit = exit; > + > + devres_add(dev, state); > + > return clk; > + > +err_clk_init: > + > + clk_put(clk); > +err_clk_get: > + > + devres_free(state); > + return ERR_PTR(ret); > } > -EXPORT_SYMBOL(devm_clk_get); > > -struct clk *devm_clk_get_optional(struct device *dev, const char *id) > +struct clk *devm_clk_get(struct device *dev, const char *id) > { > - struct clk *clk = devm_clk_get(dev, id); > + return __devm_clk_get(dev, id, clk_get, NULL, NULL); > > - if (clk == ERR_PTR(-ENOENT)) > - return NULL; > +} > +EXPORT_SYMBOL(devm_clk_get); > > - return clk; > +struct clk *devm_clk_get_optional(struct device *dev, const char *id) > +{ > + return __devm_clk_get(dev, id, clk_get_optional, NULL, NULL); > } > EXPORT_SYMBOL(devm_clk_get_optional); > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_2 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E6B44C433ED for ; Mon, 10 May 2021 17:06:17 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 56CB160FE3 for ; Mon, 10 May 2021 17:06:17 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 56CB160FE3 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=Huawei.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; h=Sender:Content-Transfer-Encoding :Content-Type:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-ID: Subject:CC:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=8OEPQhaZT8u2mW4DXaGrLRyeS8+v/yfPemPWHD7bhwQ=; b=RHyNaGnMBAlVwlrGdOgdbp6yp rhv494iUEB08xDOugwU90lUPbspHTPKIUjG/hDY6vxmXsS+Z6GkYHa2/Tt3ruOvj7Ag4i+GhOWwvN krATfzslXd0LFkvlXEdETnB0Nm5ig86OlUrxy30Eqxr/NDAwj4YBqo/PdEr2DFPe+V/IMFnRa4usr CTlSEYEMZVGKupRNlTBlpv/ZBvmenFMj8CiDJa+Ars2BMP8DstGogvO3xuHEizITo/TOvkNszK2/g ijfyyj3QFeFi1DCjGpQ8ijwCIPY2Ax01oqcRhpf0wjcJwfk777qOKyJl+xM8W/3p1qmY8fJAy/OMJ /sZmhPIoA==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lg9Kn-00F5Sv-Ru; Mon, 10 May 2021 17:04:47 +0000 Received: from bombadil.infradead.org ([2607:7c80:54:e::133]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lg9K0-00F5Aa-Kw for linux-arm-kernel@desiato.infradead.org; Mon, 10 May 2021 17:03:56 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Subject:CC:To: From:Date:Sender:Reply-To:Content-ID:Content-Description; bh=4cxclOukPSW9uM0Re0tDUs2KlQx10fDvqkSIjueA28c=; b=tnIXMZTmEirBElc+WinmkoD7Lz iBUPnS1iKVecvCudFis/RsMAhb4bSLBmL9/Buv15CLf09Hr3emiDHHXlQoWpexx5xusH9gpw0vaek eQ3UDu25LZ/sWokPGaUb8gF21648t21VOn1zLwzdWOLZVxFl90qpuaqnIMlW+vHjo7MxijmmU7imk jMioJRrHCVgqyoquJm4njggXg8hNvR237X97RGaRiZqqIX/Yv/npw53SaZJv/vp6WZKeZlsf5C+ZV k3hWl+KRFbCAPCRaQyr2f0v9hay9AGvVyY0v+oFtfzth81eBe+XZBkOWwD4avwdrSts1WudGhpwbx vFFvLcqA==; Received: from frasgout.his.huawei.com ([185.176.79.56]) by bombadil.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lg9Jx-008xJ1-9M for linux-arm-kernel@lists.infradead.org; Mon, 10 May 2021 17:03:55 +0000 Received: from fraeml715-chm.china.huawei.com (unknown [172.18.147.226]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4Ff6gN1SSkz6rnFt; Tue, 11 May 2021 00:57:52 +0800 (CST) Received: from lhreml710-chm.china.huawei.com (10.201.108.61) by fraeml715-chm.china.huawei.com (10.206.15.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2; Mon, 10 May 2021 19:03:48 +0200 Received: from localhost (10.52.123.16) by lhreml710-chm.china.huawei.com (10.201.108.61) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2; Mon, 10 May 2021 18:03:47 +0100 Date: Mon, 10 May 2021 18:02:05 +0100 From: Jonathan Cameron To: Uwe =?ISO-8859-1?Q?Kleine-K=F6nig?= CC: Michael Turquette , Stephen Boyd , , , Alexandre Belloni , Alessandro Zummo , Mark Brown , Claudiu Beznea , Wolfram Sang , "Oleksij Rempel" , Ludovic Desroches , Thierry Reding , , Andrew Morton , , Lee Jones , , Subject: Re: [PATCH v6 RESEND 1/6] clk: generalize devm_clk_get() a bit Message-ID: <20210510180205.000004dd@Huawei.com> In-Reply-To: <20210510061724.940447-2-u.kleine-koenig@pengutronix.de> References: <20210510061724.940447-1-u.kleine-koenig@pengutronix.de> <20210510061724.940447-2-u.kleine-koenig@pengutronix.de> Organization: Huawei Technologies Research and Development (UK) Ltd. X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.33; i686-w64-mingw32) MIME-Version: 1.0 X-Originating-IP: [10.52.123.16] X-ClientProxiedBy: lhreml720-chm.china.huawei.com (10.201.108.71) To lhreml710-chm.china.huawei.com (10.201.108.61) X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210510_100353_644079_A2ADC521 X-CRM114-Status: GOOD ( 21.30 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Mon, 10 May 2021 08:17:19 +0200 Uwe Kleine-K=F6nig wrote: > Allow to add an exit hook to devm managed clocks. Also use > clk_get_optional() in devm_clk_get_optional instead of open coding it. > The generalisation will be used in the next commit to add some more > devm_clk helpers. > = > Signed-off-by: Uwe Kleine-K=F6nig If feels marginally odd to register cleanup that we know won't do anything for the optional case, but it works as far as I can tell and it would be a little fiddly to special case it. FWIW Reviewed-by: Jonathan Cameron > --- > drivers/clk/clk-devres.c | 67 ++++++++++++++++++++++++++++++---------- > 1 file changed, 50 insertions(+), 17 deletions(-) > = > diff --git a/drivers/clk/clk-devres.c b/drivers/clk/clk-devres.c > index be160764911b..91c995815b57 100644 > --- a/drivers/clk/clk-devres.c > +++ b/drivers/clk/clk-devres.c > @@ -4,39 +4,72 @@ > #include > #include > = > +struct devm_clk_state { > + struct clk *clk; > + void (*exit)(struct clk *clk); > +}; > + > static void devm_clk_release(struct device *dev, void *res) > { > - clk_put(*(struct clk **)res); > + struct devm_clk_state *state =3D *(struct devm_clk_state **)res; > + > + if (state->exit) > + state->exit(state->clk); > + > + clk_put(state->clk); > } > = > -struct clk *devm_clk_get(struct device *dev, const char *id) > +static struct clk *__devm_clk_get(struct device *dev, const char *id, > + struct clk *(*get)(struct device *dev, const char *id), > + int (*init)(struct clk *clk), > + void (*exit)(struct clk *clk)) > { > - struct clk **ptr, *clk; > + struct devm_clk_state *state; > + struct clk *clk; > + int ret; > = > - ptr =3D devres_alloc(devm_clk_release, sizeof(*ptr), GFP_KERNEL); > - if (!ptr) > + state =3D devres_alloc(devm_clk_release, sizeof(*state), GFP_KERNEL); > + if (!state) > return ERR_PTR(-ENOMEM); > = > - clk =3D clk_get(dev, id); > - if (!IS_ERR(clk)) { > - *ptr =3D clk; > - devres_add(dev, ptr); > - } else { > - devres_free(ptr); > + clk =3D get(dev, id); > + if (IS_ERR(clk)) { > + ret =3D PTR_ERR(clk); > + goto err_clk_get; > } > = > + if (init) { > + ret =3D init(clk); > + if (ret) > + goto err_clk_init; > + } > + > + state->clk =3D clk; > + state->exit =3D exit; > + > + devres_add(dev, state); > + > return clk; > + > +err_clk_init: > + > + clk_put(clk); > +err_clk_get: > + > + devres_free(state); > + return ERR_PTR(ret); > } > -EXPORT_SYMBOL(devm_clk_get); > = > -struct clk *devm_clk_get_optional(struct device *dev, const char *id) > +struct clk *devm_clk_get(struct device *dev, const char *id) > { > - struct clk *clk =3D devm_clk_get(dev, id); > + return __devm_clk_get(dev, id, clk_get, NULL, NULL); > = > - if (clk =3D=3D ERR_PTR(-ENOENT)) > - return NULL; > +} > +EXPORT_SYMBOL(devm_clk_get); > = > - return clk; > +struct clk *devm_clk_get_optional(struct device *dev, const char *id) > +{ > + return __devm_clk_get(dev, id, clk_get_optional, NULL, NULL); > } > EXPORT_SYMBOL(devm_clk_get_optional); > = _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel