All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lorenzo Bianconi <lorenzo.bianconi@oss.qualcomm.com>
To: Bartosz Golaszewski <brgl@kernel.org>,
	Manivannan Sadhasivam <mani@kernel.org>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Krishna Chaitanya Chundru <krishna.chundru@oss.qualcomm.com>
Cc: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>,
	linux-pci@vger.kernel.org
Subject: Re: [PATCH] PCI/pwrctrl: Power off child devices on power-on failure
Date: Fri, 9 Oct 2026 23:57:41 +0200	[thread overview]
Message-ID: <asljVeRdLEkt939B@lore-desk> (raw)
In-Reply-To: <20260909-pwrtctl-power-on-rallback-v1-1-412ef996ba27@oss.qualcomm.com>

[-- Attachment #1: Type: text/plain, Size: 2766 bytes --]

> pci_pwrctrl_power_on_device() recursively powers on the child nodes
> of a device before powering on the device itself. If powering on a
> child fails (e.g. returning -EPROBE_DEFER), the function returned
> immediately, leaving the sibling children that were already powered
> on in the same loop iteration enabled.
> 
> Since probe deferral is a standard boot path, this leads to unbounded
> regulator and clock enable increments across retries. The error path
> in pci_pwrctrl_power_on_devices() only powers off the top-level
> children processed before the failing one and explicitly stops at it,
> so it can never clean up the siblings leaked deeper in the failed
> subtree.
> 
> Power off the sibling children that were successfully powered on
> before a child fails, and power off all children if the device's own
> power_on() fails after its children were already enabled. Switch to a
> manual child iterator so the failing node can be tracked and its
> reference released in the error path.
> 
> Fixes: b35cf3b6aa1e ("PCI/pwrctrl: Add APIs to power on/off pwrctrl devices")
> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@oss.qualcomm.com>

Hi all,

do you have any update about this fix? Thanks in advance.

Regards,
Lorenzo

> ---
>  drivers/pci/pwrctrl/core.c | 19 +++++++++++++++++--
>  1 file changed, 17 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/pci/pwrctrl/core.c b/drivers/pci/pwrctrl/core.c
> index 10d817aefb09..d29cd506972d 100644
> --- a/drivers/pci/pwrctrl/core.c
> +++ b/drivers/pci/pwrctrl/core.c
> @@ -252,14 +252,16 @@ static int __pci_pwrctrl_power_on_device(struct device *dev)
>  static int pci_pwrctrl_power_on_device(struct device_node *np)
>  {
>  	struct platform_device *pdev;
> +	struct device_node *child;
>  	int ret = 0;
>  
> -	for_each_available_child_of_node_scoped(np, child) {
> +	for_each_available_child_of_node(np, child) {
>  		ret = pci_pwrctrl_power_on_device(child);
>  		if (ret)
> -			return ret;
> +			goto err_power_off;
>  	}
>  
> +	child = NULL;
>  	if (!pci_pwrctrl_is_required(np))
>  		return 0;
>  
> @@ -279,6 +281,19 @@ static int pci_pwrctrl_power_on_device(struct device_node *np)
>  
>  	platform_device_put(pdev);
>  
> +	if (ret)
> +		goto err_power_off;
> +
> +	return 0;
> +
> +err_power_off:
> +	for_each_available_child_of_node_scoped(np, tmp) {
> +		if (tmp == child)
> +			break;
> +		pci_pwrctrl_power_off_device(tmp);
> +	}
> +	of_node_put(child);
> +
>  	return ret;
>  }
>  
> 
> ---
> base-commit: 028f86457e822ab9de5b0d6d23efddc1b8b54ae1
> change-id: 20260908-pwrtctl-power-on-rallback-5c6364b080ce
> 
> Best regards,
> -- 
> Lorenzo Bianconi <lorenzo.bianconi@oss.qualcomm.com>
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

      parent reply	other threads:[~2026-10-09 21:57 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-09 15:28 [PATCH] PCI/pwrctrl: Power off child devices on power-on failure Lorenzo Bianconi
2026-09-09 15:32 ` sashiko-bot
2026-09-10  7:06 ` Manivannan Sadhasivam
2026-09-10  7:22 ` Bartosz Golaszewski
2026-10-09 21:57 ` Lorenzo Bianconi [this message]

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=asljVeRdLEkt939B@lore-desk \
    --to=lorenzo.bianconi@oss.qualcomm.com \
    --cc=bhelgaas@google.com \
    --cc=brgl@kernel.org \
    --cc=krishna.chundru@oss.qualcomm.com \
    --cc=linux-pci@vger.kernel.org \
    --cc=mani@kernel.org \
    --cc=manivannan.sadhasivam@oss.qualcomm.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.