• Roger Luethi's avatar
    [PATCH] via-rhine: fix races · be8013e8
    Roger Luethi authored
    This patch addresses two distinct races:
    
    - Until now, the driver started the chip for Tx regardless of errors
      pending in the status register. Not good if an error occured while
      we were queueing packets -- the chip counter had not been reset,
      so Tx died. (We can't reliably get an interrupt for every error
      condition)
    
    - The Rhine-II (when under load) frequently produces a Tx descriptor
      write-back race error. Failing to handle this means waiting for the
      netdev watchdog. Fixed.
    
      In addition, we must wait for the Tx engine to turn off on error
      conditions before we scavenge the descriptor entries. Failing to do
      so will typically lead to performance going down to about 10%: Burst,
      timeout, burst, timeout.. (again, with a Rhine-II under load).
    be8013e8
via-rhine.c 55.1 KB