[PATCH 2/5] cxgb3 - fix netpoll hanlder

From: divy
Date: Wed May 30 2007 - 13:02:09 EST


From: Divy Le Ray <divy@xxxxxxxxxxx>

Fix netpoll handler to work with line interrupt, msi and msi-x.

Signed-off-by: Divy Le Ray <divy@xxxxxxxxxxx>
---

drivers/net/cxgb3/cxgb3_main.c | 16 +++++++++++++---
drivers/net/cxgb3/sge.c | 1 -
2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c
index 67b4b21..dd3710f 100644
--- a/drivers/net/cxgb3/cxgb3_main.c
+++ b/drivers/net/cxgb3/cxgb3_main.c
@@ -2076,10 +2076,20 @@ static void vlan_rx_kill_vid(struct net_
static void cxgb_netpoll(struct net_device *dev)
{
struct adapter *adapter = dev->priv;
- struct sge_qset *qs = dev2qset(dev);
+ struct port_info *pi = netdev_priv(dev);
+ int qidx;

- t3_intr_handler(adapter, qs->rspq.polling) (adapter->pdev->irq,
- adapter);
+ for (qidx = pi->first_qset; qidx < pi->first_qset + pi->nqsets; qidx++) {
+ struct sge_qset *qs = &adapter->sge.qs[qidx];
+ void *source;
+
+ if (adapter->flags & USING_MSIX)
+ source = qs;
+ else
+ source = adapter;
+
+ t3_intr_handler(adapter, qs->rspq.polling) (0, source);
+ }
}
#endif

diff --git a/drivers/net/cxgb3/sge.c b/drivers/net/cxgb3/sge.c
index eaa7dac..a60ec4d 100644
--- a/drivers/net/cxgb3/sge.c
+++ b/drivers/net/cxgb3/sge.c
@@ -2217,7 +2217,6 @@ irqreturn_t t3_sge_intr_msix_napi(int ir
struct sge_rspq *q = &qs->rspq;

spin_lock(&q->lock);
- BUG_ON(napi_is_scheduled(qs->netdev));

if (handle_responses(adap, q) < 0)
q->unhandled_irqs++;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/