From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
To: "Junyan Ye" <yejunyan@hust.edu.cn>,
"Lorenzo Pieralisi" <lpieralisi@kernel.org>,
"Krzysztof Wilczyński" <kw@linux.com>,
"Rob Herring" <robh@kernel.org>,
"Bjorn Helgaas" <bhelgaas@google.com>,
"Wei Yongjun" <weiyongjun1@huawei.com>,
"Linus Walleij" <linus.walleij@linaro.org>,
"Andrew Murray" <amurray@thegoodpenguin.co.uk>
Cc: hust-os-kernel-patches@googlegroups.com,
Dongliang Mu <dzm91@hust.edu.cn>,
linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3] pci: controller: pci-ftpci100: Release the clock resources
Date: Mon, 8 May 2023 08:59:15 +0200 [thread overview]
Message-ID: <430d0357-d10e-db3d-bc82-722b022b519b@wanadoo.fr> (raw)
In-Reply-To: <20230508043641.23807-1-yejunyan@hust.edu.cn>
Le 08/05/2023 à 06:36, Junyan Ye a écrit :
> 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 devm_clk_get(), and then
> clk_prepare_enable() makes the clock resource ready for use. After that,
> clk_disable_unprepare() should be called to release the clock resource
> when it is no longer needed. However, while doing some error handling
> in faraday_pci_probe(), clk_disable_unprepare() is not called to release
> clk and p->bus_clk before returning. These return lines are exactly 442,
> 451, 462, 478, 512, 517.
>
> Fix this warning by replacing devm_clk_get() with devm_clk_get_enabled(),
> which is equivalent to devm_clk_get() + clk_prepare_enable(). And with
> devm_clk_get_enabled(), the clock will automatically be disabled,
> unprepared and freed when the device is unbound from the bus.
>
> 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")
> Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn>
> Signed-off-by: Junyan Ye <yejunyan@hust.edu.cn>
> ---
> v2 -> v3: Rebase to v6.4-rc1 and modify commit message.
> v1 -> v2: Switch from clk_disable_unprepare() to devm_clk_get_enabled() to release the clock.
> This issue is found by static analyzer.
>
> drivers/pci/controller/pci-ftpci100.c | 14 ++------------
> 1 file changed, 2 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/pci/controller/pci-ftpci100.c b/drivers/pci/controller/pci-ftpci100.c
> index ecd3009df586..6e7981d2ed5e 100644
> --- a/drivers/pci/controller/pci-ftpci100.c
> +++ b/drivers/pci/controller/pci-ftpci100.c
> @@ -429,22 +429,12 @@ static int faraday_pci_probe(struct platform_device *pdev)
> p->dev = dev;
>
> /* Retrieve and enable optional clocks */
Hi,
completely unrelated to your patch, but this comments state "optional".
The code below seems to make both clocks mandatory.
Moreover, a few lines later, we have:
if (!IS_ERR(p->bus_clk)) {
which seems to say that bus_clk is optional.
This was introduced by 2eeb02b28579.
Just a guess, but either the comment should be updated, or the code
modified.
Just my 2c,
CJ
> - clk = devm_clk_get(dev, "PCLK");
> + clk = devm_clk_get_enabled(dev, "PCLK");
> if (IS_ERR(clk))
> return PTR_ERR(clk);
> - ret = clk_prepare_enable(clk);
> - if (ret) {
> - dev_err(dev, "could not prepare PCLK\n");
> - return ret;
> - }
> - p->bus_clk = devm_clk_get(dev, "PCICLK");
> + p->bus_clk = devm_clk_get_enabled(dev, "PCICLK");
> if (IS_ERR(p->bus_clk))
> return PTR_ERR(p->bus_clk);
> - ret = clk_prepare_enable(p->bus_clk);
> - if (ret) {
> - dev_err(dev, "could not prepare PCICLK\n");
> - return ret;
> - }
>
> p->base = devm_platform_ioremap_resource(pdev, 0);
> if (IS_ERR(p->base))
next prev parent reply other threads:[~2023-05-08 7:00 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-08 4:36 Junyan Ye
2023-05-08 6:12 ` Linus Walleij
2023-05-08 6:59 ` Christophe JAILLET [this message]
2023-05-08 12:38 ` Linus Walleij
2023-05-29 8:24 ` Lorenzo Pieralisi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=430d0357-d10e-db3d-bc82-722b022b519b@wanadoo.fr \
--to=christophe.jaillet@wanadoo.fr \
--cc=amurray@thegoodpenguin.co.uk \
--cc=bhelgaas@google.com \
--cc=dzm91@hust.edu.cn \
--cc=hust-os-kernel-patches@googlegroups.com \
--cc=kw@linux.com \
--cc=linus.walleij@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lpieralisi@kernel.org \
--cc=robh@kernel.org \
--cc=weiyongjun1@huawei.com \
--cc=yejunyan@hust.edu.cn \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®