• Thadeu Lima de Souza Cascardo's avatar
    qla2xxx: prevent board_disable from running during EEH · a30c2a3b
    Thadeu Lima de Souza Cascardo authored
    Commit f3ddac19 ("[SCSI] qla2xxx:
    Disable adapter when we encounter a PCI disconnect.") has introduced a
    code that disables the board, releasing some resources, when reading
    0xffffffff.
    
    In case this happens when there is an EEH, this read will trigger EEH
    detection and set PCI channel offline. EEH will be able to recover the
    card from this state by doing a reset, so it's a better option than
    simply disabling the card.
    
    Since eeh_check_failure will mark the channel as offline before
    returning the read value, in case there really was an EEH, we can simply
    check for pci_channel_offline, preventing the board_disable code from
    running if it's true.
    
    Without this patch, EEH code will try to access those same resources
    that board_disable will try to free. This race can cause EEH recovery to
    fail.
    
    [  504.370577] EEH: Notify device driver to resume
    [  504.370580] qla2xxx [0001:07:00.0]-9002:2: The device failed to resume I/O from slot/link_reset.
    Signed-off-by: default avatarThadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com>
    Acked-by: default avatarHimanshu Madhani <himanshu.madhani@qlogic.com>
    Signed-off-by: default avatarJames Bottomley <JBottomley@Odin.com>
    a30c2a3b
qla_isr.c 85.7 KB