• David Woodhouse's avatar
    8139cp: Do not re-enable RX interrupts in cp_tx_timeout() · aaa0062e
    David Woodhouse authored
    If an RX interrupt was already received but NAPI has not yet run when
    the RX timeout happens, we end up in cp_tx_timeout() with RX interrupts
    already disabled. Blindly re-enabling them will cause an IRQ storm.
    
    (This is made particularly horrid by the fact that cp_interrupt() always
    returns that it's handled the interrupt, even when it hasn't actually
    done anything. If it didn't do that, the core IRQ code would have
    detected the storm and handled it, I'd have had a clear smoking gun
    backtrace instead of just a spontaneously resetting router, and I'd have
    at *least* two days of my life back. Changing the return value of
    cp_interrupt() will be argued about under separate cover.)
    
    Unconditionally leave RX interrupts disabled after the reset, and
    schedule NAPI to check the receive ring and re-enable them.
    Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    aaa0062e
8139cp.c 55.4 KB