• Claudiu Manoil's avatar
    gianfar: Move TxFIFO underrun handling to reset path · bc602280
    Claudiu Manoil authored
    Handle TxFIFO underrun exceptions outside the fast path.
    A controller reset is more reliable in this exceptional
    case, as opposed to re-enabling on-the-fly the Tx DMA.
    
    As the controller reset is handled outside the fast path
    by the reset_gfar() workqueue handler, the locking
    scheme on the Tx path is significantly simplified.
    Because the Tx processing (xmit queues and tx napi) is
    disabled during controller reset, tstat access from xmit
    does not require locking.  So the scope of the txlock on
    the processing path is now reduced to num_txbdfree, which
    is shared only between process context (xmit) and softirq
    (clean_tx_ring).  As a result, the txlock must not guard
    against interrupt context, and the spin_lock_irqsave()
    from xmit can be replaced by spin_lock_bh().  Likewise,
    the locking has been downgraded for clean_tx_ring().
    Signed-off-by: default avatarClaudiu Manoil <claudiu.manoil@freescale.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    bc602280
gianfar.c 93.2 KB