From patchwork Sun Apr 30 12:51:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ziliang Liao X-Patchwork-Id: 678039 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 46FE8C7EE21 for ; Sun, 30 Apr 2023 12:54:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229904AbjD3MyH (ORCPT ); Sun, 30 Apr 2023 08:54:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57134 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230287AbjD3MyF (ORCPT ); Sun, 30 Apr 2023 08:54:05 -0400 Received: from hust.edu.cn (mail.hust.edu.cn [202.114.0.240]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 993D1271C; Sun, 30 Apr 2023 05:54:02 -0700 (PDT) Received: from ubuntu.localdomain ([10.12.172.67]) (user=saraday@hust.edu.cn mech=LOGIN bits=0) by mx1.hust.edu.cn with ESMTP id 33UCr6nY027403-33UCr6nZ027403 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO); Sun, 30 Apr 2023 20:53:11 +0800 From: Ziliang Liao To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Linus Walleij Cc: hust-os-kernel-patches@googlegroups.com, Ziliang Liao , Dongliang Mu , linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/2] bus: qcom-ebi2: use prefix devm for clock resource allocation functions Date: Sun, 30 Apr 2023 20:51:53 +0800 Message-Id: <20230430125154.126863-1-saraday@hust.edu.cn> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-FEAS-AUTH-USER: saraday@hust.edu.cn Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org Smatch reports: drivers/bus/qcom-ebi2.c:387 qcom_ebi2_probe() warn: 'ebi2clk' from clk_prepare_enable() not released on lines: 358. drivers/bus/qcom-ebi2.c:387 qcom_ebi2_probe() warn: 'ebi2xclk' from clk_prepare_enabled() not released on lines: 358. The clk_disable_unprepare() is only used to explicitly release resources when the qcom_ebi2_probe() fails, and when executed correctly, it may cause resource leakage due to unknown release time. Replace devm_clk_get() and clk_prepare_enable() with devm_clk_get_enabled() to automatically manage the allocated resources. Fixes: 335a12754808 ("bus: qcom: add EBI2 driver") Signed-off-by: Ziliang Liao Reviewed-by: Dongliang Mu --- The issue is found by static analyzer. The patched code has passed Smatch checker, but remains untested on real device. drivers/bus/qcom-ebi2.c | 35 ++++++++--------------------------- 1 file changed, 8 insertions(+), 27 deletions(-) diff --git a/drivers/bus/qcom-ebi2.c b/drivers/bus/qcom-ebi2.c index c1fef1b4bd89..3999e969e1cf 100644 --- a/drivers/bus/qcom-ebi2.c +++ b/drivers/bus/qcom-ebi2.c @@ -303,40 +303,28 @@ static int qcom_ebi2_probe(struct platform_device *pdev) u32 val; int ret; - ebi2xclk = devm_clk_get(dev, "ebi2x"); - if (IS_ERR(ebi2xclk)) + ebi2xclk = devm_clk_get_enabled(dev, "ebi2x"); + if (IS_ERR(ebi2xclk)) { + dev_err(dev, "could not enable EBI2X clk"); return PTR_ERR(ebi2xclk); - - ret = clk_prepare_enable(ebi2xclk); - if (ret) { - dev_err(dev, "could not enable EBI2X clk (%d)\n", ret); - return ret; } - ebi2clk = devm_clk_get(dev, "ebi2"); + ebi2clk = devm_clk_get_enabled(dev, "ebi2"); if (IS_ERR(ebi2clk)) { - ret = PTR_ERR(ebi2clk); - goto err_disable_2x_clk; - } - - ret = clk_prepare_enable(ebi2clk); - if (ret) { - dev_err(dev, "could not enable EBI2 clk\n"); - goto err_disable_2x_clk; + dev_err(dev, "could not enable EBI2 clk"); + return PTR_ERR(ebi2clk); } res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ebi2_base = devm_ioremap_resource(dev, res); if (IS_ERR(ebi2_base)) { - ret = PTR_ERR(ebi2_base); - goto err_disable_clk; + return PTR_ERR(ebi2_base); } res = platform_get_resource(pdev, IORESOURCE_MEM, 1); ebi2_xmem = devm_ioremap_resource(dev, res); if (IS_ERR(ebi2_xmem)) { - ret = PTR_ERR(ebi2_xmem); - goto err_disable_clk; + return PTR_ERR(ebi2_xmem); } /* Allegedly this turns the power save mode off */ @@ -378,13 +366,6 @@ static int qcom_ebi2_probe(struct platform_device *pdev) if (have_children) return of_platform_default_populate(np, NULL, dev); return 0; - -err_disable_clk: - clk_disable_unprepare(ebi2clk); -err_disable_2x_clk: - clk_disable_unprepare(ebi2xclk); - - return ret; } static const struct of_device_id qcom_ebi2_of_match[] = {