cxl: use pcibios_free_controller_deferred() when removing vPHBs
authorAndrew Donnellan <andrew.donnellan@au1.ibm.com>
Thu, 18 Aug 2016 07:35:14 +0000 (17:35 +1000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Mon, 22 Aug 2016 01:09:33 +0000 (11:09 +1000)
commit6f38a8b9a45833495dc878c335c5431cd98a16ed
treed454aa443853494533788f1b6aad74e1714eb67a
parentf5ed841ce75ca33f413c394110d6dc002c097b01
cxl: use pcibios_free_controller_deferred() when removing vPHBs

When cxl removes a vPHB, it's possible that the pci_controller may be freed
before all references to the devices on the vPHB have been released. This
in turn causes an invalid memory access when the devices are eventually
released, as pcibios_release_device() attempts to call the phb's
release_device hook.

In cxl_pci_vphb_remove(), remove the existing call to
pcibios_free_controller(). Instead, use
pcibios_free_controller_deferred() to free the pci_controller after all
devices have been released. Export pci_set_host_bridge_release() so we can
do this.

Cc: stable@vger.kernel.org
Signed-off-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
Reviewed-by: Matthew R. Ochs <mrochs@linux.vnet.ibm.com>
Acked-by: Ian Munsie <imunsie@au1.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
drivers/misc/cxl/vphb.c
drivers/pci/host-bridge.c