]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
PCI/PM: Set power.strict_midlayer in pci_pm_init()
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 27 Jun 2025 19:29:16 +0000 (21:29 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 3 Jul 2025 15:10:40 +0000 (17:10 +0200)
The PCI bus type does not expect its runtime PM suspend callback
function, pci_pm_runtime_suspend(), to be invoked at all during system-
wide suspend and resume, and it does not expect its runtime resume
callback function, pci_pm_runtime_resume(), to be invoked at any point
when runtime PM is disabled for the given device during system-wide
suspend and resume, so make it express that expectation by setting
power.strict_midlayer for all PCI devices in pci_pm_prepare() and
clear it in pci_pm_complete().

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
Link: https://patch.msgid.link/1925097.atdPhlSkOF@rjwysocki.net
drivers/pci/pci-driver.c

index 67db34fd10ee7101baeeaae1bb9bec3b13e2fdeb..b853585cb1f87216981bde2a7782b8ed9c337636 100644 (file)
@@ -708,6 +708,8 @@ static int pci_pm_prepare(struct device *dev)
        struct pci_dev *pci_dev = to_pci_dev(dev);
        const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 
+       dev_pm_set_strict_midlayer(dev, true);
+
        if (pm && pm->prepare) {
                int error = pm->prepare(dev);
                if (error < 0)
@@ -749,6 +751,8 @@ static void pci_pm_complete(struct device *dev)
                if (pci_dev->current_state < pre_sleep_state)
                        pm_request_resume(dev);
        }
+
+       dev_pm_set_strict_midlayer(dev, false);
 }
 
 #else /* !CONFIG_PM_SLEEP */