From: Johan Hovold <johan@kernel.org>
To: Bjorn Helgaas <helgaas@kernel.org>
Cc: Dan Carpenter <dan.carpenter@linaro.org>,
bhelgaas@google.com, linux-pci@vger.kernel.org,
Kai-Heng Feng <kai.heng.feng@canonical.com>
Subject: Re: [bug report] Revert "PCI/ASPM: Remove pcie_aspm_pm_state_change()"
Date: Tue, 23 Jan 2024 18:33:29 +0100 [thread overview]
Message-ID: <Za_4aY93mWFzp9A4@hovoldconsulting.com> (raw)
In-Reply-To: <20240122182849.GA277265@bhelgaas>
On Mon, Jan 22, 2024 at 12:28:49PM -0600, Bjorn Helgaas wrote:
> [+cc Johan, Kai-Heng]
>
> On Mon, Jan 22, 2024 at 05:43:09PM +0300, Dan Carpenter wrote:
> > Hello Bjorn Helgaas,
> >
> > The patch f93e71aea6c6: "Revert "PCI/ASPM: Remove
> > pcie_aspm_pm_state_change()"" from Jan 1, 2024 (linux-next), leads to
> > the following Smatch static checker warning:
> >
> > drivers/pci/pcie/aspm.c:1017 pcie_aspm_pm_state_change()
> > warn: sleeping in atomic context
>
> Thanks Dan, this is probably related to the lockdep issue Johan
> reported here:
> https://lore.kernel.org/r/ZZu0qx2cmn7IwTyQ@hovoldconsulting.com
This looks like a separate issue actually.
> > drivers/pci/pcie/aspm.c
> > 1007 void pcie_aspm_pm_state_change(struct pci_dev *pdev)
> > 1008 {
> > 1009 struct pcie_link_state *link = pdev->link_state;
> > 1010
> > 1011 if (aspm_disabled || !link)
> > 1012 return;
> > 1013 /*
> > 1014 * Devices changed PM state, we should recheck if latency
> > 1015 * meets all functions' requirement
> > 1016 */
> > --> 1017 down_read(&pci_bus_sem);
> >
> > This is a revert from a patch from 2022 which was before I had written
> > this "sleeping in atomic" static checker thing.
> >
> > 1018 mutex_lock(&aspm_lock);
> > 1019 pcie_update_aspm_capable(link->root);
> > 1020 pcie_config_aspm_path(link);
> > 1021 mutex_unlock(&aspm_lock);
> > 1022 up_read(&pci_bus_sem);
> > 1023 }
> >
> > The call trees that Smatch is complaining about are:
> >
> > vortex_boomerang_interrupt() <- disables preempt
> > -> _vortex_interrupt()
> > -> _boomerang_interrupt()
> > -> vortex_error()
> > -> vortex_up()
> > velocity_suspend() <- disables preempt
> > -> velocity_set_power_state()
> > -> pci_set_power_state()
> > -> pci_set_low_power_state()
> > -> pcie_aspm_pm_state_change()
Based on a very quick look, I don't think it has ever been valid to call
pci_set_power_state() from atomic context as it for, for example, can
call pci_bus_set_current_state() which also takes the bus semaphore.
Johan
prev parent reply other threads:[~2024-01-23 17:33 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-22 14:43 [bug report] Revert "PCI/ASPM: Remove pcie_aspm_pm_state_change()" Dan Carpenter
2024-01-22 18:28 ` Bjorn Helgaas
2024-01-23 17:33 ` Johan Hovold [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=Za_4aY93mWFzp9A4@hovoldconsulting.com \
--to=johan@kernel.org \
--cc=bhelgaas@google.com \
--cc=dan.carpenter@linaro.org \
--cc=helgaas@kernel.org \
--cc=kai.heng.feng@canonical.com \
--cc=linux-pci@vger.kernel.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