PCI: Fix pci cardbus removal
authorYinghai Lu <yinghai@kernel.org>
Sun, 5 Feb 2012 06:55:00 +0000 (22:55 -0800)
committerJesse Barnes <jbarnes@virtuousgeek.org>
Fri, 10 Feb 2012 20:19:31 +0000 (12:19 -0800)
commit3682a3946d2b0bad621db871e3bead83e523a238
tree22fa013f268abeb35863ac7be2016912c4977762
parent8161fe91d8da34c1a231b6e2d4454b4b3179a5d4
PCI: Fix pci cardbus removal

During test busn_res allocation with cardbus, found pci card removal is not
working anymore, and it turns out it is broken by:

|commit 79cc9601c3e42b4f0650fe7e69132ebce7ab48f9
|Date:   Tue Nov 22 21:06:53 2011 -0800
|
|    PCI: Only call pci_stop_bus_device() one time for child devices at remove

The above changed the behavior of pci_remove_behind_bridge that
yenta_cardbus depended on.  So restore the old behavoir of
pci_remove_behind_bridge (which requires stopping and removing of all
devices) by:

1. rename pci_remove_behind_bridge to __pci_remove_behind_bridge, and let
   __pci_remove_bus_device() call it instead.
2. add pci_stop_behind_bridge that will stop devices behind a bridge
3. add back pci_remove_behind_bridge that will stop and remove devices
   under bridge.

-v2: update commit description a little bit.

Tested-by: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
drivers/pci/remove.c