• Gavin Shan's avatar
    net/qlge: Avoids recursive EEH error · f3c9e9b1
    Gavin Shan authored
    commit 3275c0c6 upstream.
    
    One timer, whose handler keeps reading on MMIO register for EEH
    core to detect error in time, is started when the PCI device driver
    is loaded. MMIO register can't be accessed during PE reset in EEH
    recovery. Otherwise, the unexpected recursive error is triggered.
    The timer isn't closed that time if the interface isn't brought
    up. So the unexpected recursive error is seen during EEH recovery
    when the interface is down.
    
    This avoids the unexpected recursive EEH error by closing the timer
    in qlge_io_error_detected() before EEH PE reset unconditionally. The
    timer is started unconditionally after EEH PE reset in qlge_io_resume().
    Also, the timer should be closed unconditionally when the device is
    removed from the system permanently in qlge_io_error_detected().
    Reported-by: default avatarShriya R. Kulkarni <shriyakul@in.ibm.com>
    Signed-off-by: default avatarGavin Shan <gwshan@linux.vnet.ibm.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarJiri Slaby <jslaby@suse.cz>
    f3c9e9b1
qlge_main.c 133 KB