Received: by 2002:a05:6358:9144:b0:117:f937:c515 with SMTP id r4csp3238445rwr; Sat, 22 Apr 2023 01:09:41 -0700 (PDT) X-Google-Smtp-Source: AKy350YXfGnpcN4DPDWNBRANAprApKW386M84Z90E6FtYAcCIWRRK88U6y0Jck9dRvsnLPB9YdIY X-Received: by 2002:a17:90a:1a10:b0:23b:4bce:97de with SMTP id 16-20020a17090a1a1000b0023b4bce97demr6991512pjk.4.1682150981392; Sat, 22 Apr 2023 01:09:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1682150981; cv=none; d=google.com; s=arc-20160816; b=e9JqoAaAGvRXpzaEj2NTyPChOsPkbIZIy1wxuD4IGd/jDTzzNgyTzqBGQj8Ejr3A90 kscwbBtyxM9TUkn/GcsseQD65eRM/vVjcuoUcbkow7C8IGLtCXG1gxDoEKmB3yiBYRC5 NneicHMYunnS3Eq7VDZ8V4WoHUvf6YADFyMLrsNwctxxn/ABgT+2E/T7t6wnW8J38qsD swLXmBhfeQK90FWZXyKG7/45/GdIqyFARBXdjNnx/3nomXHf+jdVnCg2CBBuiR8JCkge sztR7B7ketjyLpFrhoHKe5m84D2aAZcscOItcEvX3u4AYE3OYVBTfd9A4oVSmd1pTOxY hOeA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=q+DErx1CIvHVlgi4+QAiHelqm16jeOnTpoFVn3sQ+7U=; b=Q1VjJvKawUV4PlcdDA97D3yLEbXLU17BsTSWJZ/hipt0W4s5MQcaJLZ+5KHNQW/ynn U6f6frbBBhn87wUbpTeMnUHF31r1d6TolT3xnAsQIPpUzlxxDtTnC7+Gire4cCwZlaL2 D9yYIXTqTujGynFHS/zHKmi0Z3083JedptJDBl9tthyuEi1VWthn4rgB84AMN8d/0kYY c+8qvoqCKhUhf6ptVkxSxYRtaj/YAtebIYJKe3PT9rd9Hpx7ygLLORQvnExspTp6jLPa 2V4HjrTL0gSawWfXJRBQaq4dL+DwFuBgD6WSvMfxZg4YNDSW1t6RpcYkSRBAa9gHHslw AyKw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id m5-20020a17090a5a4500b0024770f5087csi8999000pji.120.2023.04.22.01.09.22; Sat, 22 Apr 2023 01:09:41 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229536AbjDVHsj (ORCPT + 99 others); Sat, 22 Apr 2023 03:48:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43754 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229451AbjDVHsi (ORCPT ); Sat, 22 Apr 2023 03:48:38 -0400 Received: from hust.edu.cn (unknown [202.114.0.240]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BFD211BDD; Sat, 22 Apr 2023 00:48:36 -0700 (PDT) Received: from amy-vm.localdomain ([10.12.183.232]) (user=yejunyan@hust.edu.cn mech=LOGIN bits=0) by mx1.hust.edu.cn with ESMTP id 33M7iZgr022988-33M7iZgs022988 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO); Sat, 22 Apr 2023 15:44:49 +0800 From: Junyan Ye To: Lorenzo Pieralisi , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Wei Yongjun , Linus Walleij , Andrew Murray Cc: hust-os-kernel-patches@googlegroups.com, Junyan Ye , Dongliang Mu , linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] pci: controller: pci-ftpci100: Release the clock resources Date: Sat, 22 Apr 2023 15:42:52 +0800 Message-Id: <20230422074254.14473-1-yejunyan@hust.edu.cn> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-FEAS-AUTH-USER: yejunyan@hust.edu.cn X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_PASS, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Smatch reported: 1. drivers/pci/controller/pci-ftpci100.c:526 faraday_pci_probe() warn: 'clk' from clk_prepare_enable() not released on lines: 442,451,462,478,512,517. 2. drivers/pci/controller/pci-ftpci100.c:526 faraday_pci_probe() warn: 'p->bus_clk' from clk_prepare_enable() not released on lines: 451,462,478,512,517. The clock resource is obtained by the devm_clk_get function. The clk_prepare_enable function then makes the clock resource ready for use, notifying the system that the clock resource should be run. After that, the clock resource should be released when it is no longer needed. This includes notifying the system that the clock resource is no longer needed and revoking the prepared clock. The corresponding function is clk_disable_unprepare. However, while doing some error handling in the faraday_pci_probe function, the clk_disable_unprepare function is not called to release the clk and p->bus_clk resources. Fix the warning by adding the clk_disable_unprepare function before returning the error message. Fixes: b3c433efb8a3 ("PCI: faraday: Fix wrong pointer passed to PTR_ERR()") Fixes: 2eeb02b28579 ("PCI: faraday: Add clock handling") Fixes: 783a862563f7 ("PCI: faraday: Use pci_parse_request_of_pci_ranges()") Fixes: d3c68e0a7e34 ("PCI: faraday: Add Faraday Technology FTPCI100 PCI Host Bridge driver") Fixes: f1e8bd21e39e ("PCI: faraday: Convert IRQ masking to raw PCI config accessors") Signed-off-by: Junyan Ye Reviewed-by: Dongliang Mu --- This issue is found by static analyzer. drivers/pci/controller/pci-ftpci100.c | 31 +++++++++++++++++++-------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/drivers/pci/controller/pci-ftpci100.c b/drivers/pci/controller/pci-ftpci100.c index ecd3009df586..ca3ba377b3dd 100644 --- a/drivers/pci/controller/pci-ftpci100.c +++ b/drivers/pci/controller/pci-ftpci100.c @@ -438,17 +438,21 @@ static int faraday_pci_probe(struct platform_device *pdev) return ret; } p->bus_clk = devm_clk_get(dev, "PCICLK"); - if (IS_ERR(p->bus_clk)) - return PTR_ERR(p->bus_clk); + if (IS_ERR(p->bus_clk)) { + ret = PTR_ERR(p->bus_clk); + goto err_release_clk; + } ret = clk_prepare_enable(p->bus_clk); if (ret) { dev_err(dev, "could not prepare PCICLK\n"); - return ret; + goto err_release_clk; } p->base = devm_platform_ioremap_resource(pdev, 0); - if (IS_ERR(p->base)) - return PTR_ERR(p->base); + if (IS_ERR(p->base)) { + ret = PTR_ERR(p->base); + goto err_release_p_bus_clk; + } win = resource_list_first_type(&host->windows, IORESOURCE_IO); if (win) { @@ -459,7 +463,8 @@ static int faraday_pci_probe(struct platform_device *pdev) writel(val, p->base + FTPCI_IOSIZE); } else { dev_err(dev, "illegal IO mem size\n"); - return -EINVAL; + ret = -EINVAL; + goto err_release_p_bus_clk; } } @@ -475,7 +480,7 @@ static int faraday_pci_probe(struct platform_device *pdev) ret = faraday_pci_setup_cascaded_irq(p); if (ret) { dev_err(dev, "failed to setup cascaded IRQ\n"); - return ret; + goto err_release_p_bus_clk; } } @@ -509,12 +514,12 @@ static int faraday_pci_probe(struct platform_device *pdev) ret = faraday_pci_parse_map_dma_ranges(p); if (ret) - return ret; + goto err_release_p_bus_clk; ret = pci_scan_root_bus_bridge(host); if (ret) { dev_err(dev, "failed to scan host: %d\n", ret); - return ret; + goto err_release_p_bus_clk; } p->bus = host->bus; p->bus->max_bus_speed = max_bus_speed; @@ -524,6 +529,14 @@ static int faraday_pci_probe(struct platform_device *pdev) pci_bus_add_devices(p->bus); return 0; + +err_release_p_bus_clk: + clk_disable_unprepare(p->bus_clk); + +err_release_clk: + clk_disable_unprepare(clk); + + return ret; } /* -- 2.25.1