]> git.baikalelectronics.ru Git - kernel.git/commit
gianfar: Move TxFIFO underrun handling to reset path
authorClaudiu Manoil <claudiu.manoil@freescale.com>
Wed, 6 May 2015 15:07:29 +0000 (18:07 +0300)
committerDavid S. Miller <davem@davemloft.net>
Sat, 9 May 2015 21:37:46 +0000 (17:37 -0400)
commit46ead2a0d76c912a9e4be25854dd33b7abe2869c
tree4dd58bdadf78fc6036a4cd385f6582f3b750ea53
parentf47e1bf0724caab1c24cd22e7ad940485b6094b9
gianfar: Move TxFIFO underrun handling to reset path

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: Claudiu Manoil <claudiu.manoil@freescale.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/gianfar.c