Merge branch 'pm-runtime'
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 11 Mar 2024 14:21:00 +0000 (15:21 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 11 Mar 2024 14:21:00 +0000 (15:21 +0100)
Merge changes related to the runtime power management of devices for
6.9-rc1:

 - Simplify pm_runtime_get_if_active() usage and add a replacement for
   pm_runtime_put_autosuspend() (Sakari Ailus).

 - Add a tracepoint for runtime_status changes tracking (Vilas Bhat).

 - Fix section title markdown in the runtime PM documentation (Yiwei
   Lin).

* pm-runtime:
  Documentation: PM: Fix runtime_pm.rst markdown syntax
  PM: runtime: add tracepoint for runtime_status changes
  PM: runtime: Add pm_runtime_put_autosuspend() replacement
  PM: runtime: Simplify pm_runtime_get_if_active() usage

1  2 
drivers/accel/ivpu/ivpu_pm.c
drivers/pci/pci.c

Simple merge
@@@ -2522,36 -2522,29 +2522,36 @@@ static void pci_pme_list_scan(struct wo
                if (pdev->pme_poll) {
                        struct pci_dev *bridge = pdev->bus->self;
                        struct device *dev = &pdev->dev;
 -                      int pm_status;
 +                      struct device *bdev = bridge ? &bridge->dev : NULL;
 +                      int bref = 0;
  
                        /*
 -                       * If bridge is in low power state, the
 -                       * configuration space of subordinate devices
 -                       * may be not accessible
 +                       * If we have a bridge, it should be in an active/D0
 +                       * state or the configuration space of subordinate
 +                       * devices may not be accessible or stable over the
 +                       * course of the call.
                         */
 -                      if (bridge && bridge->current_state != PCI_D0)
 -                              continue;
 +                      if (bdev) {
-                               bref = pm_runtime_get_if_active(bdev, true);
++                              bref = pm_runtime_get_if_active(bdev);
 +                              if (!bref)
 +                                      continue;
 +
 +                              if (bridge->current_state != PCI_D0)
 +                                      goto put_bridge;
 +                      }
  
                        /*
 -                       * If the device is in a low power state it
 -                       * should not be polled either.
 +                       * The device itself should be suspended but config
 +                       * space must be accessible, therefore it cannot be in
 +                       * D3cold.
                         */
 -                      pm_status = pm_runtime_get_if_active(dev);
 -                      if (!pm_status)
 -                              continue;
 -
 -                      if (pdev->current_state != PCI_D3cold)
 +                      if (pm_runtime_suspended(dev) &&
 +                          pdev->current_state != PCI_D3cold)
                                pci_pme_wakeup(pdev, NULL);
  
 -                      if (pm_status > 0)
 -                              pm_runtime_put(dev);
 +put_bridge:
 +                      if (bref > 0)
 +                              pm_runtime_put(bdev);
                } else {
                        list_del(&pme_dev->list);
                        kfree(pme_dev);