PCI: Fix bridge_d3 update on device removal
authorLukas Wunner <lukas@wunner.de>
Tue, 6 Sep 2016 04:20:46 +0000 (06:20 +0200)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 13 Sep 2016 21:00:18 +0000 (16:00 -0500)
commit035ee288ae7ade4152f1c3cf23a587b04fdc526c
tree2d628d87296e9c18a1e38b9c5575777e2f6c0da6
parent6af7e4f77259ee946103387372cb159f2e99a6d4
PCI: Fix bridge_d3 update on device removal

Starting with v4.8, we allow a PCIe port to runtime suspend to D3hot if the
port itself and its children satisfy a number of conditions.  Once a child
is removed, we recheck those conditions in case the removed device was
blocking the port from suspending.

The rechecking needs to happen *after* the device has been removed from the
bus it resides on.  Otherwise when walking the port's subordinate bus in
pci_bridge_d3_update(), the device being removed would erroneously still be
taken into account.

However the device is removed from the bus_list in pci_destroy_dev() and we
currently recheck *before* that.  Fix it.

Fixes: 9d26d3a8f1b0 ("PCI: Put PCIe ports into D3 during suspend")
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Acked-by: Rafael J. Wysocki <mika.westerberg@linux.intel.com>
drivers/pci/remove.c