Commit 81a2e36d authored by stephen hemminger's avatar stephen hemminger Committed by David S. Miller

forcedeth: Stay in NAPI as long as there's work

The following does the same thing without the extra overhead
of testing all the registers. It also handles the out of memory
case.
Signed-off-by: default avatarStephen Hemminger <shemminger@vyatta.com>
Tested-by: default avatarTom Herbert <therbert@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f84af32c
......@@ -3743,23 +3743,26 @@ static int nv_napi_poll(struct napi_struct *napi, int budget)
u8 __iomem *base = get_hwbase(dev);
unsigned long flags;
int retcode;
int tx_work, rx_work;
int rx_count, tx_work=0, rx_work=0;
do {
if (!nv_optimized(np)) {
spin_lock_irqsave(&np->lock, flags);
tx_work = nv_tx_done(dev, np->tx_ring_size);
tx_work += nv_tx_done(dev, np->tx_ring_size);
spin_unlock_irqrestore(&np->lock, flags);
rx_work = nv_rx_process(dev, budget);
rx_count = nv_rx_process(dev, budget);
retcode = nv_alloc_rx(dev);
} else {
spin_lock_irqsave(&np->lock, flags);
tx_work = nv_tx_done_optimized(dev, np->tx_ring_size);
tx_work += nv_tx_done_optimized(dev, np->tx_ring_size);
spin_unlock_irqrestore(&np->lock, flags);
rx_work = nv_rx_process_optimized(dev, budget);
rx_count = nv_rx_process_optimized(dev, budget);
retcode = nv_alloc_rx_optimized(dev);
}
} while (retcode == 0 &&
rx_count > 0 && (rx_work += rx_count) < budget);
if (retcode) {
spin_lock_irqsave(&np->lock, flags);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment