Linux PCI subsystem development
 help / color / mirror / Atom feed
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

      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