• Niklas Schnelle's avatar
    s390/pci: implement minimal PCI error recovery · 4cdf2f4e
    Niklas Schnelle authored
    When the platform detects an error on a PCI function or a service action
    has been performed it is put in the error state and an error event
    notification is provided to the OS.
    
    Currently we treat all error event notifications the same and simply set
    pdev->error_state = pci_channel_io_perm_failure requiring user
    intervention such as use of the recover attribute to get the device
    usable again. Despite requiring a manual step this also has the
    disadvantage that the device is completely torn down and recreated
    resulting in higher level devices such as a block or network device
    being recreated. In case of a block device this also means that it may
    need to be removed and added to a software raid even if that could
    otherwise survive with a temporary degradation.
    
    This is of course not ideal more so since an error notification with PEC
    0x3A indicates that the platform already performed error recovery
    successfully or that the error state was caused by a service action that
    is now finished.
    
    At least in this case we can assume that the error state can be reset
    and the function made usable again. So as not to have the disadvantage
    of a full tear down and recreation we need to coordinate this recovery
    with the driver. Thankfully there is already a well defined recovery
    flow for this described in Documentation/PCI/pci-error-recovery.rst.
    
    The implementation of this is somewhat straight forward and simplified
    by the fact that our recovery flow is defined per PCI function. As
    a reset we use the newly introduced zpci_hot_reset_device() which also
    takes the PCI function out of the error state.
    Reviewed-by: default avatarPierre Morel <pmorel@linux.ibm.com>
    Acked-by: default avatarMatthew Rosato <mjrosato@linux.ibm.com>
    Signed-off-by: default avatarNiklas Schnelle <schnelle@linux.ibm.com>
    Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
    4cdf2f4e
pci.h 8.11 KB