• Oliver O'Halloran's avatar
    powerpc/eeh: Clean up EEH PEs after recovery finishes · 799abe28
    Oliver O'Halloran authored
    When the last device in an eeh_pe is removed the eeh_pe structure itself
    (and any empty parents) are freed since they are no longer needed. This
    results in a crash when a hotplug driver is involved since the following
    may occur:
    
    1. Device is suprise removed.
    2. Driver performs an MMIO, which fails and queues and eeh_event.
    3. Hotplug driver receives a hotplug interrupt and removes any
       pci_devs that were under the slot.
    4. pci_dev is torn down and the eeh_pe is freed.
    5. The EEH event handler thread processes the eeh_event and crashes
       since the eeh_pe pointer in the eeh_event structure is no
       longer valid.
    
    Crashing is generally considered poor form. Instead of doing that use
    the fact PEs are marked as EEH_PE_INVALID to keep them around until the
    end of the recovery cycle, at which point we can safely prune any empty
    PEs.
    Signed-off-by: default avatarOliver O'Halloran <oohall@gmail.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20190903101605.2890-2-oohall@gmail.com
    799abe28
eeh_pe.c 23.1 KB