diff options
author | Giuseppe CAVALLARO <peppe.cavallaro@st.com> | 2012-11-26 03:10:42 +0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-11-27 02:22:10 +0400 |
commit | 9125cdd1be1199588f71c99e76e32bcda0b7d847 (patch) | |
tree | 52fe0ed58cc7522324399f9a3e23fb81bdff6d7e /drivers/net/ethernet/stmicro/stmmac/dwmac_lib.c | |
parent | 7284a3f1ad0d09dcf3cc5a1914ceaf01a3352314 (diff) | |
download | linux-9125cdd1be1199588f71c99e76e32bcda0b7d847.tar.xz |
stmmac: add the initial tx coalesce schema
This patch adds a new schema used for mitigating the
number of transmit interrupts.
It is based on a SW timer and a threshold value.
The timer is used to periodically call the stmmac_tx_clean
function; the threshold is used for setting the IC (Interrupt
on Completion bit). The ISR will then invoke the poll method.
Also the patch improves some ethtool stat fields.
V2: review the logic to manage the IC bit in the TDESC
that was bugged because it didn't take care about the
fragments. Also fix the tx_count_frames that has not to be
limited to TX DMA ring. Thanks to Ben Hutchings.
V3: removed the spin_lock irqsave/restore as D. Miller suggested.
Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/stmicro/stmmac/dwmac_lib.c')
-rw-r--r-- | drivers/net/ethernet/stmicro/stmmac/dwmac_lib.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac_lib.c b/drivers/net/ethernet/stmicro/stmmac/dwmac_lib.c index 4e0e18a44fcc..73766e655011 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac_lib.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac_lib.c @@ -206,9 +206,10 @@ int dwmac_dma_interrupt(void __iomem *ioaddr, /* TX/RX NORMAL interrupts */ if (intr_status & DMA_STATUS_NIS) { x->normal_irq_n++; - if (likely((intr_status & DMA_STATUS_RI) || - (intr_status & (DMA_STATUS_TI)))) - ret = handle_tx_rx; + if (likely(intr_status & DMA_STATUS_RI)) + ret |= handle_rx; + if (intr_status & (DMA_STATUS_TI)) + ret |= handle_tx; } /* Optional hardware blocks, interrupts should be disabled */ if (unlikely(intr_status & |