• Finn Thain's avatar
    net/sonic: Prevent tx watchdog timeout · 686f85d7
    Finn Thain authored
    Section 5.5.3.2 of the datasheet says,
    
        If FIFO Underrun, Byte Count Mismatch, Excessive Collision, or
        Excessive Deferral (if enabled) errors occur, transmission ceases.
    
    In this situation, the chip asserts a TXER interrupt rather than TXDN.
    But the handler for the TXDN is the only way that the transmit queue
    gets restarted. Hence, an aborted transmission can result in a watchdog
    timeout.
    
    This problem can be reproduced on congested link, as that can result in
    excessive transmitter collisions. Another way to reproduce this is with
    a FIFO Underrun, which may be caused by DMA latency.
    
    In event of a TXER interrupt, prevent a watchdog timeout by restarting
    transmission.
    
    Fixes: 1da177e4 ("Linux-2.6.12-rc2")
    Tested-by: default avatarStan Johnson <userm57@yahoo.com>
    Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    686f85d7
sonic.c 22.9 KB