[bug report] Revert "PCI/ASPM: Remove pcie_aspm_pm_state_change()"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

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()

So what Smatch is saying is the vortex_boomerang_interrupt() and
velocity_suspend() hold spin locks and then set the power state.  The
call trees are quite long so I'm not really able to be sure if this is
a false positive or not...  I wish this warning were more useful.

These emails are a one time thing.  Just reply if it's a false positive
and I'll note it down.  Otherwise feel free to ignore it.

regards,
dan carpenter




[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux