powerpc/eeh: Release EEH device state synchronously
EEH device state is currently removed (by eeh_remove_device()) during the device release handler, which is invoked as the device's reference count drops to zero. This may take some time, or forever, as other threads may hold references. However, the PCI device state is released synchronously by pci_stop_and_remove_bus_device(). This mismatch causes problems, for example the device may be re-discovered as a new device before the release handler has been called, leaving the PCI and EEH state mismatched. So instead, call eeh_remove_device() from the bus device removal handlers, which are called synchronously in the removal path. Signed-off-by: Sam Bobroff <sbobroff@linux.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/0a1f5105d3a33b1c090bba31de63eb0cdd25de7b.1588045502.git.sbobroff@linux.ibm.com
This commit is contained in:

committed by
Michael Ellerman

parent
6fa13640ae
commit
466381ecdc
@@ -57,8 +57,6 @@ void pcibios_release_device(struct pci_dev *dev)
|
||||
struct pci_controller *phb = pci_bus_to_host(dev->bus);
|
||||
struct pci_dn *pdn = pci_get_pdn(dev);
|
||||
|
||||
eeh_remove_device(dev);
|
||||
|
||||
if (phb->controller_ops.release_device)
|
||||
phb->controller_ops.release_device(dev);
|
||||
|
||||
|
Reference in New Issue
Block a user