diff options
Diffstat (limited to 'drivers/net/starfire.c')
-rw-r--r-- | drivers/net/starfire.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/net/starfire.c b/drivers/net/starfire.c index 0358809f409..1902f4fabde 100644 --- a/drivers/net/starfire.c +++ b/drivers/net/starfire.c | |||
@@ -1290,8 +1290,8 @@ static irqreturn_t intr_handler(int irq, void *dev_instance) | |||
1290 | if (intr_status & (IntrRxDone | IntrRxEmpty)) { | 1290 | if (intr_status & (IntrRxDone | IntrRxEmpty)) { |
1291 | u32 enable; | 1291 | u32 enable; |
1292 | 1292 | ||
1293 | if (likely(netif_rx_schedule_prep(dev, &np->napi))) { | 1293 | if (likely(netif_rx_schedule_prep(&np->napi))) { |
1294 | __netif_rx_schedule(dev, &np->napi); | 1294 | __netif_rx_schedule(&np->napi); |
1295 | enable = readl(ioaddr + IntrEnable); | 1295 | enable = readl(ioaddr + IntrEnable); |
1296 | enable &= ~(IntrRxDone | IntrRxEmpty); | 1296 | enable &= ~(IntrRxDone | IntrRxEmpty); |
1297 | writel(enable, ioaddr + IntrEnable); | 1297 | writel(enable, ioaddr + IntrEnable); |
@@ -1503,6 +1503,11 @@ static int __netdev_rx(struct net_device *dev, int *quota) | |||
1503 | desc->status = 0; | 1503 | desc->status = 0; |
1504 | np->rx_done = (np->rx_done + 1) % DONE_Q_SIZE; | 1504 | np->rx_done = (np->rx_done + 1) % DONE_Q_SIZE; |
1505 | } | 1505 | } |
1506 | |||
1507 | if (*quota == 0) { /* out of rx quota */ | ||
1508 | retcode = 1; | ||
1509 | goto out; | ||
1510 | } | ||
1506 | writew(np->rx_done, np->base + CompletionQConsumerIdx); | 1511 | writew(np->rx_done, np->base + CompletionQConsumerIdx); |
1507 | 1512 | ||
1508 | out: | 1513 | out: |
@@ -1530,7 +1535,7 @@ static int netdev_poll(struct napi_struct *napi, int budget) | |||
1530 | intr_status = readl(ioaddr + IntrStatus); | 1535 | intr_status = readl(ioaddr + IntrStatus); |
1531 | } while (intr_status & (IntrRxDone | IntrRxEmpty)); | 1536 | } while (intr_status & (IntrRxDone | IntrRxEmpty)); |
1532 | 1537 | ||
1533 | netif_rx_complete(dev, napi); | 1538 | netif_rx_complete(napi); |
1534 | intr_status = readl(ioaddr + IntrEnable); | 1539 | intr_status = readl(ioaddr + IntrEnable); |
1535 | intr_status |= IntrRxDone | IntrRxEmpty; | 1540 | intr_status |= IntrRxDone | IntrRxEmpty; |
1536 | writel(intr_status, ioaddr + IntrEnable); | 1541 | writel(intr_status, ioaddr + IntrEnable); |