Linux PCI subsystem development
 help / color / mirror / Atom feed
From: Ali Tariq <alitariq45892@gmail.com>
To: sashiko-reviews@lists.linux.dev
Cc: linux-pci@vger.kernel.org
Subject: Re: [PATCH] PCI: starfive: Fix unchecked pm_runtime_get_sync() in probe
Date: Tue, 14 Jul 2026 18:01:53 +0500	[thread overview]
Message-ID: <4f0c1daa-dbc5-4a3c-8914-253372deec8b@gmail.com> (raw)
In-Reply-To: <20260712180440.423421F000E9@smtp.kernel.org>



On 7/12/26 11:04 PM, sashiko-bot@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
> 
> Pre-existing issues:
> - [High] The driver's removal path incorrectly calls asynchronous pm_runtime_put() before pm_runtime_disable(), and tears down PM references before disabling the hardware.
> - [High] Failure in starfive_pcie_clk_rst_init() returns directly without powering off the PHY, causing a resource leak.
> - [High] Missing return statement after regulator_enable() failure causes a silent fallthrough, later leading to an unbalanced regulator_disable().
> --
> 
> --- Patch [1]: [PATCH] PCI: starfive: Fix unchecked pm_runtime_get_sync() in probe ---
> commit 83a329f8aee98c4aec071468fc96ecc89497124e
> Author: Ali Tariq <alitariq45892@gmail.com>
> 
> PCI: starfive: Fix unchecked pm_runtime_get_sync() in probe
> 
> This patch replaces pm_runtime_get_sync() with pm_runtime_resume_and_get()
> in starfive_pcie_probe() to properly handle runtime resume failures. It
> adds error handling to disable runtime PM and bail out of the probe
> function if the device fails to resume, preventing unbalanced usage
> counters and hardware configuration on an unpowered device.
> 
>> diff --git a/drivers/pci/controller/plda/pcie-starfive.c b/drivers/pci/controller/plda/pcie-starfive.c
>> index 298036c3e7f94..e9a472985b8ac 100644
>> --- a/drivers/pci/controller/plda/pcie-starfive.c
>> +++ b/drivers/pci/controller/plda/pcie-starfive.c
>> @@ -410,7 +410,11 @@ static int starfive_pcie_probe(struct platform_device *pdev)
>>   		return ret;
>>   
>>   	pm_runtime_enable(&pdev->dev);
>> -	pm_runtime_get_sync(&pdev->dev);
>> +	ret = pm_runtime_resume_and_get(&pdev->dev);
>> +	if (ret < 0) {
>> +		pm_runtime_disable(&pdev->dev);
>> +		return dev_err_probe(dev, ret, "failed to resume device\n");
>> +	}
>>   
>>   	plda->host_ops = &sf_host_ops;
>>   	plda->num_events = PLDA_MAX_EVENT_NUM;
> 
> [Severity: High]
> This isn't a bug introduced by this patch, but looking at starfive_pcie_remove():
> 
> drivers/pci/controller/plda/pcie-starfive.c:starfive_pcie_remove() {
>      ...
> 	pm_runtime_put(&pdev->dev);
> 	pm_runtime_disable(&pdev->dev);
> 	plda_pcie_host_deinit(&pcie->plda);
>      ...
> }
> 
> Does this leave the hardware in an active power state upon module unload?
> 
> Since pm_runtime_put() is asynchronous, wouldn't calling pm_runtime_disable()
> immediately afterward risk canceling the idle/suspend work?
> 
> Also, does tearing down the PM reference before stopping the PCIe host
> controller via plda_pcie_host_deinit() reverse the proper teardown order?
> Could this cause the device to power off while still being actively accessed
> by the core?

This is fixed in a separate patch [1].

> [Severity: High]
> This is a pre-existing issue, but I noticed a potential resource leak in
> starfive_pcie_host_init():
> 
> drivers/pci/controller/plda/pcie-starfive.c:starfive_pcie_host_init() {
>      ...
> 	ret = starfive_pcie_enable_phy(dev, pcie);
> 	if (ret)
> 		return ret;

I do not think we need to call starfive_pcie_disable_phy() here inside
the error handling. If starfive_pcie_enable_phy() fails, its internal 
error path already cleans up by calling phy_exit() via the 'err_phy_on' 
label. Calling starfive_pcie_disable_phy() here would cause a redundant, 
unbalanced phy_exit() call.

>      ...
> 	ret = starfive_pcie_clk_rst_init(pcie);
> 	if (ret)
> 		return ret;
>      ...
> }
> 
> If starfive_pcie_clk_rst_init() fails, it returns the error code directly.
> Does this fail to clean up the successfully initialized PHY?
> 

This is fixed in a separate patch [2].

> [Severity: High]
> This is a pre-existing issue, but does this code swallow the regulator error?
> 
> drivers/pci/controller/plda/pcie-starfive.c:starfive_pcie_host_init() {
>      ...
> 	if (pcie->vpcie3v3) {
> 		ret = regulator_enable(pcie->vpcie3v3);
> 		if (ret)
> 			dev_err_probe(dev, ret, "failed to enable vpcie3v3 regulator\n");
> 	}
>      ...
> }
> 
> Because there is no return statement after dev_err_probe(), the function
> proceeds and eventually returns success at the end. Could this cause the
> driver to continue operating with unpowered hardware?
> 
> Later on, starfive_pcie_host_deinit() unconditionally calls
> regulator_disable(). Since the regulator was not successfully enabled,
> would this trigger an unbalanced disable warning in the regulator core and
> corrupt regulator use counts?
> 

This is also fixed in a separate patch [2].

[1] 
https://lore.kernel.org/linux-pci/20260713145014.740898-1-alitariq45892@gmail.com/T/#u
[2] 
https://lore.kernel.org/linux-pci/20260714113029.326207-1-alitariq45892@gmail.com/T/#u


  parent reply	other threads:[~2026-07-14 13:03 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-12 17:54 [PATCH] PCI: starfive: Fix unchecked pm_runtime_get_sync() in probe Ali Tariq
2026-07-12 18:04 ` sashiko-bot
2026-07-13 12:48   ` Ali Tariq
2026-07-14 13:01   ` Ali Tariq [this message]
2026-07-18 15:33 ` [PATCH v2] " Ali Tariq
2026-07-18 15:49   ` sashiko-bot
2026-07-29 15:33   ` Ali Tariq
2026-07-29 16:43   ` Manivannan Sadhasivam

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=4f0c1daa-dbc5-4a3c-8914-253372deec8b@gmail.com \
    --to=alitariq45892@gmail.com \
    --cc=linux-pci@vger.kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /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