powerpc/eeh: Release EEH device state synchronously
authorSam Bobroff <sbobroff@linux.ibm.com>
Tue, 28 Apr 2020 03:45:06 +0000 (13:45 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 18 May 2020 11:58:44 +0000 (21:58 +1000)
commit466381ecdc741b1767d980e10b1ec49f6bde56f3
tree8ed14afc846dc4e9b7c533818a394b9af2948fa5
parent6fa13640aea7bb0760846981aa2da4245307bd26
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
arch/powerpc/kernel/eeh.c
arch/powerpc/kernel/pci-hotplug.c