PCI/PM: Rearrange pci_update_current_state()
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 14 Apr 2022 13:07:24 +0000 (15:07 +0200)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 5 May 2022 19:19:48 +0000 (14:19 -0500)
Save one config space access in pci_update_current_state() by testing the
retrieved PCI_PM_CTRL register value against PCI_POSSIBLE_ERROR() instead
of invoking pci_device_is_present() separately.

While at it, drop a pair of unnecessary parens.

No expected functional impact.

Link: https://lore.kernel.org/r/1917095.PYKUYFuaPT@kreacher
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/pci.c

index 992417646128d82c866a455f7e2c16848b609bb0..11f95ca84b22e25239d81cbea19fce85ec08c150 100644 (file)
@@ -1201,14 +1201,17 @@ static int pci_raw_set_power_state(struct pci_dev *dev, pci_power_t state)
  */
 void pci_update_current_state(struct pci_dev *dev, pci_power_t state)
 {
-       if (platform_pci_get_power_state(dev) == PCI_D3cold ||
-           !pci_device_is_present(dev)) {
+       if (platform_pci_get_power_state(dev) == PCI_D3cold) {
                dev->current_state = PCI_D3cold;
        } else if (dev->pm_cap) {
                u16 pmcsr;
 
                pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
-               dev->current_state = (pmcsr & PCI_PM_CTRL_STATE_MASK);
+               if (PCI_POSSIBLE_ERROR(pmcsr)) {
+                       dev->current_state = PCI_D3cold;
+                       return;
+               }
+               dev->current_state = pmcsr & PCI_PM_CTRL_STATE_MASK;
        } else {
                dev->current_state = state;
        }