On Wed, Dec 13, 2023 at 7:27 PM Mario Limonciello <mario.limonciello@xxxxxxx> wrote: > > When the system is going to S5 resuming devices is unnecessary at > best and may cause problems for power consumption at S5 at worst. > > Check the target `system_state` in the pci driver shutdown() callback > and skip the runtime resume step if the system is being powered off. > > Cc: mpearson-lenovo@xxxxxxxxx > Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx> > --- > drivers/pci/pci-driver.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c > index 51ec9e7e784f..5a6f7a786952 100644 > --- a/drivers/pci/pci-driver.c > +++ b/drivers/pci/pci-driver.c > @@ -507,7 +507,9 @@ static void pci_device_shutdown(struct device *dev) > struct pci_dev *pci_dev = to_pci_dev(dev); > struct pci_driver *drv = pci_dev->driver; > > - pm_runtime_resume(dev); > + /* If system will go to S5, don't wake up PCI devices for shutdown */ > + if (system_state != SYSTEM_POWER_OFF) > + pm_runtime_resume(dev); What's the guarantee that the driver's shutdown callback will not access MMIO regions of a runtime-suspended device? > if (drv && drv->shutdown) > drv->shutdown(pci_dev); > --