• Richard Röjfors's avatar
    macb: avoid lockup when TGO during underrun · 39eddb4c
    Richard Röjfors authored
    In rare cases when an underrun occur, all macb buffers where consumed
    and the netif_queue was stopped infinitely. This happens then the TGO
    (transfer ongoing) bit in the TSR is set (and UND). It seems like
    clening up after the underrun makes the driver and the macb hardware
    end up in an inconsistent state. The result of this is that in the
    following calls to macb_tx no TX buffers are released -> the
    netif_queue was stopped, and never woken up again.
    
    The solution is to disable the transmitter, if TGO is set, before
    clening up after the underrun, and re-enable the transmitter when the
    cleaning up is done.
    Signed-off-by: default avatarRichard Röjfors <richard.rojfors@endian.se>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    39eddb4c
macb.c 31.8 KB