amd8111e: Fix rx return code
authorChris Friesen <cfriesen@nortel.com>
Tue, 28 Oct 2008 22:50:54 +0000 (15:50 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 28 Oct 2008 22:50:54 +0000 (15:50 -0700)
The amd8111e rx poll routine currently mishandles the case when we
process exactly the number of packets specified in the budget.

This patch is basically as suggested by David Miller.

Signed-off-by: Chris Friesen <cfriesen@nortel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/amd8111e.c

index c54967f7942ae2ed2f2fd40601a86f8e85d9c125..ba1be0b3a8c8b510fea533ba7cda0a6c7baef253 100644 (file)
@@ -833,12 +833,14 @@ static int amd8111e_rx_poll(struct napi_struct *napi, int budget)
 
        } while(intr0 & RINT0);
 
-       /* Receive descriptor is empty now */
-       spin_lock_irqsave(&lp->lock, flags);
-       __netif_rx_complete(dev, napi);
-       writel(VAL0|RINTEN0, mmio + INTEN0);
-       writel(VAL2 | RDMD0, mmio + CMD0);
-       spin_unlock_irqrestore(&lp->lock, flags);
+       if (rx_pkt_limit > 0) {
+               /* Receive descriptor is empty now */
+               spin_lock_irqsave(&lp->lock, flags);
+               __netif_rx_complete(dev, napi);
+               writel(VAL0|RINTEN0, mmio + INTEN0);
+               writel(VAL2 | RDMD0, mmio + CMD0);
+               spin_unlock_irqrestore(&lp->lock, flags);
+       }
 
 rx_not_empty:
        return num_rx_pkt;