From: Bjorn Helgaas <helgaas@kernel.org>
To: Krishna Chaitanya Chundru <quic_krichai@quicinc.com>,
Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Cc: rafael@kernel.org, ulf.hansson@linaro.org,
"Johan Hovold" <johan@kernel.org>,
"Kevin Xie" <kevin.xie@starfivetech.com>,
"Lorenzo Pieralisi" <lpieralisi@kernel.org>,
"Krzysztof Wilczyński" <kw@linux.com>,
"Rob Herring" <robh@kernel.org>,
"Bjorn Helgaas" <bhelgaas@google.com>,
Markus.Elfring@web.de, quic_mrana@quicinc.com,
m.szyprowski@samsung.com, linux-pm@vger.kernel.org,
linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,
regressions@lists.linux.dev
Subject: Re: [PATCH v7 2/2] PCI: Enable runtime pm of the host bridge
Date: Tue, 14 Jan 2025 15:16:53 -0600 [thread overview]
Message-ID: <20250114211653.GA487608@bhelgaas> (raw)
In-Reply-To: <20250113162549.a2y7dlwnsfetryyw@thinkpad>
On Mon, Jan 13, 2025 at 09:55:49PM +0530, Manivannan Sadhasivam wrote:
> On Tue, Jan 07, 2025 at 03:27:59PM +0100, Johan Hovold wrote:
> > On Tue, Jan 07, 2025 at 07:40:39PM +0530, Krishna Chaitanya Chundru wrote:
> > > On 1/7/2025 6:49 PM, Johan Hovold wrote:
> >
> > > >> @@ -3106,6 +3106,17 @@ int pci_host_probe(struct pci_host_bridge *bridge)
> > > >> pcie_bus_configure_settings(child);
> > > >>
> > > >> pci_bus_add_devices(bus);
> > > >> +
> > > >> + /*
> > > >> + * Ensure pm_runtime_enable() is called for the controller drivers,
> > > >> + * before calling pci_host_probe() as pm frameworks expects if the
> > > >> + * parent device supports runtime pm then it needs to enabled before
> > > >> + * child runtime pm.
> > > >> + */
> > > >> + pm_runtime_set_active(&bridge->dev);
> > > >> + pm_runtime_no_callbacks(&bridge->dev);
> > > >> + devm_pm_runtime_enable(&bridge->dev);
> > > >> +
> > > >> return 0;
> > > >> }
> > > >> EXPORT_SYMBOL_GPL(pci_host_probe);
> > > >
> > > > I just noticed that this change in 6.13-rc1 is causing the
> > > > following warning on resume from suspend on machines like the
> > > > Lenovo ThinkPad X13s:
> >
> > > Can you confirm if you are seeing this issue is seen in the
> > > boot-up case also. As this part of the code executes only at the
> > > boot time and will not have effect in resume from suspend.
> >
> > No, I only see it during resume. And enabling runtime PM can (and
> > in this case, obviously does) impact system suspend as well.
> >
> > > > pci0004:00: pcie4: Enabling runtime PM for inactive device with active children
> >
> > > I believe this is not causing any functional issues.
> >
> > It still needs to be fixed.
> >
> > > > which may have unpopulated ports (this laptop SKU does not
> > > > have a modem).
> >
> > > Can you confirm if this warning goes away if there is some
> > > endpoint connected to it.
> >
> > I don't have anything to connect to the slot in this machine, but
> > this seems to be the case as I do not see this warning for the
> > populated slots, nor on the CRD reference design which has a modem
> > on PCIe4.
>
> Yes, this is only happening for unpopulated slots and the warning
> shows up only if runtime PM is enabled for both PCI bridge and host
> bridge. This patch enables the runtime PM for host bridge and if the
> PCI bridge runtime PM is also enabled (only happens now for
> ACPI/BIOS based platforms), then the warning shows up only if the
> PCI bridge was RPM suspended (mostly happens if there was no device
> connected) during the system wide resume time.
>
> For the sake of reference, PCI host bridge is the parent of PCI
> bridge.
>
> Looking at where the warning gets triggered (in
> pm_runtime_enable()), we have the below checks:
>
> dev->power.runtime_status == RPM_SUSPENDED
> !dev->power.ignore_children
> atomic_read(&dev->power.child_count) > 0
>
> When pm_runtime_enable() gets called for PCI host bridge:
>
> dev->power.runtime_status = RPM_SUSPENDED
> dev->power.ignore_children = 0
> dev->power.child_count = 1
>
> First 2 passes seem legit, but the issue is with the 3rd one. Here,
> the child_count of 1 means that the PCI host bridge has an 'active'
> child (which is the PCI bridge). The PCI bridge was supposed to be
> RPM_SUSPENDED as the resume process should first resume the parent
> (PCI host bridge). But this is not the case here.
>
> Then looking at where the child_count gets incremented, it leads to
> pm_runtime_set_active() of device_resume_noirq().
> pm_runtime_set_active() is only called for a device if
> dev_pm_skip_suspend() succeeds, which requires
> DPM_FLAG_SMART_SUSPEND flag to be set and the device to be runtime
> suspended.
>
> This criteria matches for PCI bridge. So its status was set to
> 'RPM_ACTIVE' even though the parent PCI host bridge was still in the
> RPM_SUSPENDED state. I don't think this is a valid condition as seen
> from the warning triggered for PCI host bridge when
> pm_runtime_enable() is called from device_resume_early():
>
> pci0004:00: pcie4: Enabling runtime PM for inactive device with
> active children
>
> I'm not sure of what the fix is in this case. But removing the
> DPM_FLAG_SMART_SUSPEND flag from PCI bridge driver (portdrv) makes
> the warning go away. This indicates that something is wrong with the
> DPM_FLAG_SMART_SUSPEND flag handling in PM core.
>
> Ulf/Rafael, thoughts?
What's the plan for this? Does anybody have a proposal?
IIUC there is no functional issue, but the new warning must be fixed,
and it would sure be nice to do it before v6.13. If there *is* a
functional problem, we need to consider a revert ASAP.
Bjorn
next prev parent reply other threads:[~2025-01-14 21:16 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-11 8:41 [PATCH v7 0/2] PCI: Enable runtime pm of the host bridge Krishna chaitanya chundru
2024-11-11 8:41 ` [PATCH v7 1/2] PCI: starfive: Enable PCIe controller's runtime PM before probing " Krishna chaitanya chundru
2024-11-11 8:41 ` [PATCH v7 2/2] PCI: Enable runtime pm of the " Krishna chaitanya chundru
2024-11-11 16:46 ` Markus Elfring
2024-11-13 5:24 ` Krishna Chaitanya Chundru
2025-01-07 13:19 ` Johan Hovold
2025-01-07 14:10 ` Krishna Chaitanya Chundru
2025-01-07 14:27 ` Johan Hovold
2025-01-13 16:25 ` Manivannan Sadhasivam
2025-01-14 21:16 ` Bjorn Helgaas [this message]
2025-01-19 15:29 ` Manivannan Sadhasivam
2025-01-20 10:29 ` Johan Hovold
2025-01-20 15:28 ` Manivannan Sadhasivam
2025-01-21 13:18 ` Johan Hovold
2025-01-21 13:34 ` Johan Hovold
2025-01-24 5:15 ` Manivannan Sadhasivam
2025-01-27 14:31 ` Ulf Hansson
2025-01-27 19:57 ` Rafael J. Wysocki
2025-01-28 11:47 ` Rafael J. Wysocki
2025-01-28 15:58 ` Manivannan Sadhasivam
2025-01-28 16:07 ` Rafael J. Wysocki
2024-11-12 23:44 ` [PATCH v7 0/2] " Bjorn Helgaas
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=20250114211653.GA487608@bhelgaas \
--to=helgaas@kernel.org \
--cc=Markus.Elfring@web.de \
--cc=bhelgaas@google.com \
--cc=johan@kernel.org \
--cc=kevin.xie@starfivetech.com \
--cc=kw@linux.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=lpieralisi@kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=manivannan.sadhasivam@linaro.org \
--cc=quic_krichai@quicinc.com \
--cc=quic_mrana@quicinc.com \
--cc=rafael@kernel.org \
--cc=regressions@lists.linux.dev \
--cc=robh@kernel.org \
--cc=ulf.hansson@linaro.org \
/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