diff options
| -rw-r--r-- | drivers/net/forcedeth.c | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c index a1c0e7bb70e8..5cf0e6615695 100644 --- a/drivers/net/forcedeth.c +++ b/drivers/net/forcedeth.c | |||
| @@ -3743,23 +3743,26 @@ static int nv_napi_poll(struct napi_struct *napi, int budget) | |||
| 3743 | u8 __iomem *base = get_hwbase(dev); | 3743 | u8 __iomem *base = get_hwbase(dev); |
| 3744 | unsigned long flags; | 3744 | unsigned long flags; |
| 3745 | int retcode; | 3745 | int retcode; |
| 3746 | int tx_work, rx_work; | 3746 | int rx_count, tx_work=0, rx_work=0; |
| 3747 | 3747 | ||
| 3748 | if (!nv_optimized(np)) { | 3748 | do { |
| 3749 | spin_lock_irqsave(&np->lock, flags); | 3749 | if (!nv_optimized(np)) { |
| 3750 | tx_work = nv_tx_done(dev, np->tx_ring_size); | 3750 | spin_lock_irqsave(&np->lock, flags); |
| 3751 | spin_unlock_irqrestore(&np->lock, flags); | 3751 | tx_work += nv_tx_done(dev, np->tx_ring_size); |
| 3752 | spin_unlock_irqrestore(&np->lock, flags); | ||
| 3752 | 3753 | ||
| 3753 | rx_work = nv_rx_process(dev, budget); | 3754 | rx_count = nv_rx_process(dev, budget); |
| 3754 | retcode = nv_alloc_rx(dev); | 3755 | retcode = nv_alloc_rx(dev); |
| 3755 | } else { | 3756 | } else { |
| 3756 | spin_lock_irqsave(&np->lock, flags); | 3757 | spin_lock_irqsave(&np->lock, flags); |
| 3757 | tx_work = nv_tx_done_optimized(dev, np->tx_ring_size); | 3758 | tx_work += nv_tx_done_optimized(dev, np->tx_ring_size); |
| 3758 | spin_unlock_irqrestore(&np->lock, flags); | 3759 | spin_unlock_irqrestore(&np->lock, flags); |
| 3759 | 3760 | ||
| 3760 | rx_work = nv_rx_process_optimized(dev, budget); | 3761 | rx_count = nv_rx_process_optimized(dev, budget); |
| 3761 | retcode = nv_alloc_rx_optimized(dev); | 3762 | retcode = nv_alloc_rx_optimized(dev); |
| 3762 | } | 3763 | } |
| 3764 | } while (retcode == 0 && | ||
| 3765 | rx_count > 0 && (rx_work += rx_count) < budget); | ||
| 3763 | 3766 | ||
| 3764 | if (retcode) { | 3767 | if (retcode) { |
| 3765 | spin_lock_irqsave(&np->lock, flags); | 3768 | spin_lock_irqsave(&np->lock, flags); |
