Hi all, Here is v2, addressing feedback from v1.
Original cover letter follows, slightly updated for v2: This patch set adds support for EEH recovery of hot plugged devices on pSeries machines. Specifically, devices discovered by PCI rescanning using /sys/bus/pci/rescan, which includes devices hotplugged by QEMU's device_add command. (Upstream Linux pSeries guests running under QEMU/KVM don't currently use slot power control for hotplugging.) As a side effect this also provides EEH support for devices removed by /sys/bus/pci/devices/*/remove and re-discovered by writing to /sys/bus/pci/rescan, on all platforms. The approach I've taken is to use the fact that the existing pcibios_bus_add_device() platform hooks (which are used to set up EEH on Virtual Function devices (VFs)) are actually called for all devices, so I've widened their scope and made other adjustments necessary to allow them to work for hotplugged and boot-time devices as well. Because some of the changes are in generic PowerPC code, it's possible that I've disturbed something for another PowerPC platform. I've tried to minimize this by leaving that code alone as much as possible and so there are a few cases where eeh_add_device_{early,late}() or eeh_add_sysfs_files() is called more than once. I think these can be looked at later, as duplicate calls are not harmful. The first patch is a rework of the pcibios_init reordering patch I posted earlier, which I've included here because it's necessary for this set. I have done some testing for PowerNV on Power9 using a modified pnv_php module and some testing on pSeries with slot power control using a modified rpaphp module, and the EEH-related parts seem to work. Cheers, Sam. Patch set changelog follows: Patch set v2: Patch 1/6: powerpc/64: Adjust order in pcibios_init() Patch 2/6: powerpc/eeh: Clear stale EEH_DEV_NO_HANDLER flag * Also clear EEH_DEV_NO_HANDLER in eeh_handle_special_event(). Patch 3/6 (was 4/8): powerpc/eeh: Improve debug messages around device addition Patch 4/6 (was 6/8): powerpc/eeh: Initialize EEH address cache earlier Patch 5/6 (was 3/8 and 7/8): powerpc/eeh: EEH for pSeries hot plug - Dropped changes to the PowerNV PHB EEH flag, instead refactor just enough to use the existing flag from multiple places. - Merge the little remaining work from the above change into the patch where it's used. Patch 6/6 (was 5/8 and 8/8): powerpc/eeh: Refactor around eeh_probe_devices() - As it's so small, merged the enablement message patch into this one (where it's used). - Reworked enablement messages. Patch set v1: Patch 1/8: powerpc/64: Adjust order in pcibios_init() Patch 2/8: powerpc/eeh: Clear stale EEH_DEV_NO_HANDLER flag Patch 3/8: powerpc/eeh: Convert PNV_PHB_FLAG_EEH to global flag Patch 4/8: powerpc/eeh: Improve debug messages around device addition Patch 5/8: powerpc/eeh: Add eeh_show_enabled() Patch 6/8: powerpc/eeh: Initialize EEH address cache earlier Patch 7/8: powerpc/eeh: EEH for pSeries hot plug Patch 8/8: powerpc/eeh: Remove eeh_probe_devices() and eeh_addr_cache_build() Sam Bobroff (6): powerpc/64: Adjust order in pcibios_init() powerpc/eeh: Clear stale EEH_DEV_NO_HANDLER flag powerpc/eeh: Improve debug messages around device addition powerpc/eeh: Initialize EEH address cache earlier powerpc/eeh: EEH for pSeries hot plug powerpc/eeh: Refactor around eeh_probe_devices() arch/powerpc/include/asm/eeh.h | 8 +-- arch/powerpc/kernel/eeh.c | 33 ++++----- arch/powerpc/kernel/eeh_cache.c | 29 +------- arch/powerpc/kernel/eeh_driver.c | 11 ++- arch/powerpc/kernel/of_platform.c | 3 +- arch/powerpc/kernel/pci-common.c | 4 -- arch/powerpc/kernel/pci_32.c | 4 ++ arch/powerpc/kernel/pci_64.c | 12 +++- arch/powerpc/platforms/powernv/eeh-powernv.c | 57 ++++++++++----- arch/powerpc/platforms/pseries/eeh_pseries.c | 75 +++++++++++--------- arch/powerpc/platforms/pseries/pci.c | 3 +- 11 files changed, 127 insertions(+), 112 deletions(-) -- 2.19.0.2.gcad72f5712