diff options
author | Tom Herbert <therbert@google.com> | 2010-05-05 18:15:21 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-05-05 21:24:17 -0700 |
commit | d951f7250305adaea5f25398b70023681183d0cb (patch) | |
tree | fcefaffedb3ec24b876713d6afd2eab66852c6d9 /drivers/net/forcedeth.c | |
parent | 0294b6f78f2dd9d94fa0deec28e8845a7fb43ac3 (diff) | |
download | talos-op-linux-d951f7250305adaea5f25398b70023681183d0cb.tar.gz talos-op-linux-d951f7250305adaea5f25398b70023681183d0cb.zip |
forcedeth: Account for consumed budget in napi poll
Repeated calls to nv_rx_process in napi poll routine do not take
portion of budget that has been consumed in previous calls. Fix by
subtracting the number of packets processed.
Signed-off-by: Tom Herbert <therbert@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/forcedeth.c')
-rw-r--r-- | drivers/net/forcedeth.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c index f9e1dd48ac56..e282d0ae6a3d 100644 --- a/drivers/net/forcedeth.c +++ b/drivers/net/forcedeth.c @@ -3564,14 +3564,15 @@ static int nv_napi_poll(struct napi_struct *napi, int budget) tx_work += nv_tx_done(dev, np->tx_ring_size); spin_unlock_irqrestore(&np->lock, flags); - rx_count = nv_rx_process(dev, budget); + rx_count = nv_rx_process(dev, budget - rx_work); retcode = nv_alloc_rx(dev); } else { spin_lock_irqsave(&np->lock, flags); tx_work += nv_tx_done_optimized(dev, np->tx_ring_size); spin_unlock_irqrestore(&np->lock, flags); - rx_count = nv_rx_process_optimized(dev, budget); + rx_count = nv_rx_process_optimized(dev, + budget - rx_work); retcode = nv_alloc_rx_optimized(dev); } } while (retcode == 0 && |