diff options
author | Lukas Wunner <lukas@wunner.de> | 2016-10-28 10:52:06 +0200 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2016-11-18 01:44:56 +0100 |
commit | 1ed276a7b9d84626e5243fc54863440c74a4100a (patch) | |
tree | 6fa65a3a3c7125f6574f25bf37576b29f373f3ab /drivers/pci/pci.h | |
parent | PCI: Don't acquire ref on parent in pci_bridge_d3_update() (diff) | |
download | linux-1ed276a7b9d84626e5243fc54863440c74a4100a.tar.xz linux-1ed276a7b9d84626e5243fc54863440c74a4100a.zip |
PCI: Autosense device removal in pci_bridge_d3_update()
The algorithm to update the flag indicating whether a bridge may go to D3
makes a few optimizations based on whether the update was caused by the
removal of a device on the one hand, versus the addition of a device or the
change of its D3cold flags on the other hand.
The information whether the update pertains to a removal is currently
passed in by the caller, but the function may as well determine that itself
by examining the device in question, thereby allowing for a considerable
simplification and reduction of the code.
Out of several options to determine removal, I've chosen the function
device_is_registered() because it's cheap: It merely returns the
dev->kobj.state_in_sysfs flag. That flag is set through device_add() when
the root bus is scanned and cleared through device_remove(). The call to
pci_bridge_d3_update() happens after each of these calls, respectively, so
the ordering is correct.
No functional change intended.
Tested-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/pci/pci.h')
-rw-r--r-- | drivers/pci/pci.h | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index 451856210e18..27048bb88783 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -85,8 +85,7 @@ void pci_pm_init(struct pci_dev *dev); void pci_ea_init(struct pci_dev *dev); void pci_allocate_cap_save_buffers(struct pci_dev *dev); void pci_free_cap_save_buffers(struct pci_dev *dev); -void pci_bridge_d3_device_changed(struct pci_dev *dev); -void pci_bridge_d3_device_removed(struct pci_dev *dev); +void pci_bridge_d3_update(struct pci_dev *dev); static inline void pci_wakeup_event(struct pci_dev *dev) { |