diff options
author | Michael Neuling <mikey@neuling.org> | 2015-05-27 08:06:57 +0200 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2015-06-03 05:27:15 +0200 |
commit | 10e796309a670bb2c13eae5aa6f60e10d2d6a6e1 (patch) | |
tree | 1a7569b0ff2c12aa6686a480b4ea15a914b8ace2 | |
parent | powerpc/pci: Export symbols for CXL (diff) | |
download | linux-10e796309a670bb2c13eae5aa6f60e10d2d6a6e1.tar.xz linux-10e796309a670bb2c13eae5aa6f60e10d2d6a6e1.zip |
powerpc/pci: Add release_device() hook to phb ops
Add release_device() hook to phb ops so we can clean up for specific phbs.
Signed-off-by: Michael Neuling <mikey@neuling.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
-rw-r--r-- | arch/powerpc/include/asm/pci-bridge.h | 2 | ||||
-rw-r--r-- | arch/powerpc/kernel/pci-hotplug.c | 5 |
2 files changed, 7 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/pci-bridge.h b/arch/powerpc/include/asm/pci-bridge.h index 6d17bb8498bf..4cf0caaa33c7 100644 --- a/arch/powerpc/include/asm/pci-bridge.h +++ b/arch/powerpc/include/asm/pci-bridge.h @@ -27,6 +27,8 @@ struct pci_controller_ops { * allow assignment/enabling of the device. */ bool (*enable_device_hook)(struct pci_dev *); + void (*release_device)(struct pci_dev *); + /* Called during PCI resource reassignment */ resource_size_t (*window_alignment)(struct pci_bus *, unsigned long type); void (*reset_secondary_bus)(struct pci_dev *dev); diff --git a/arch/powerpc/kernel/pci-hotplug.c b/arch/powerpc/kernel/pci-hotplug.c index 7ed85a69a9c2..7f9ed0c1f6b9 100644 --- a/arch/powerpc/kernel/pci-hotplug.c +++ b/arch/powerpc/kernel/pci-hotplug.c @@ -29,7 +29,12 @@ */ void pcibios_release_device(struct pci_dev *dev) { + struct pci_controller *phb = pci_bus_to_host(dev->bus); + eeh_remove_device(dev); + + if (phb->controller_ops.release_device) + phb->controller_ops.release_device(dev); } /** |