aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/chelsio/sge.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/chelsio/sge.c')
-rw-r--r--drivers/net/chelsio/sge.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/drivers/net/chelsio/sge.c b/drivers/net/chelsio/sge.c
index e4f874a70fe..ffa7e649a6e 100644
--- a/drivers/net/chelsio/sge.c
+++ b/drivers/net/chelsio/sge.c
@@ -1620,23 +1620,20 @@ static int process_pure_responses(struct adapter *adapter)
1620 * or protection from interrupts as data interrupts are off at this point and 1620 * or protection from interrupts as data interrupts are off at this point and
1621 * other adapter interrupts do not interfere. 1621 * other adapter interrupts do not interfere.
1622 */ 1622 */
1623int t1_poll(struct net_device *dev, int *budget) 1623int t1_poll(struct napi_struct *napi, int budget)
1624{ 1624{
1625 struct adapter *adapter = dev->priv; 1625 struct adapter *adapter = container_of(napi, struct adapter, napi);
1626 struct net_device *dev = adapter->port[0].dev;
1626 int work_done; 1627 int work_done;
1627 1628
1628 work_done = process_responses(adapter, min(*budget, dev->quota)); 1629 work_done = process_responses(adapter, budget);
1629 *budget -= work_done;
1630 dev->quota -= work_done;
1631
1632 if (unlikely(responses_pending(adapter)))
1633 return 1;
1634
1635 netif_rx_complete(dev);
1636 writel(adapter->sge->respQ.cidx, adapter->regs + A_SG_SLEEPING);
1637
1638 return 0;
1639 1630
1631 if (likely(!responses_pending(adapter))) {
1632 netif_rx_complete(dev, napi);
1633 writel(adapter->sge->respQ.cidx,
1634 adapter->regs + A_SG_SLEEPING);
1635 }
1636 return work_done;
1640} 1637}
1641 1638
1642/* 1639/*
@@ -1653,13 +1650,13 @@ irqreturn_t t1_interrupt(int irq, void *data)
1653 1650
1654 writel(F_PL_INTR_SGE_DATA, adapter->regs + A_PL_CAUSE); 1651 writel(F_PL_INTR_SGE_DATA, adapter->regs + A_PL_CAUSE);
1655 1652
1656 if (__netif_rx_schedule_prep(dev)) { 1653 if (napi_schedule_prep(&adapter->napi)) {
1657 if (process_pure_responses(adapter)) 1654 if (process_pure_responses(adapter))
1658 __netif_rx_schedule(dev); 1655 __netif_rx_schedule(dev, &adapter->napi);
1659 else { 1656 else {
1660 /* no data, no NAPI needed */ 1657 /* no data, no NAPI needed */
1661 writel(sge->respQ.cidx, adapter->regs + A_SG_SLEEPING); 1658 writel(sge->respQ.cidx, adapter->regs + A_SG_SLEEPING);
1662 netif_poll_enable(dev); /* undo schedule_prep */ 1659 napi_enable(&adapter->napi); /* undo schedule_prep */
1663 } 1660 }
1664 } 1661 }
1665 return IRQ_HANDLED; 1662 return IRQ_HANDLED;