cxgb3 - fix netpoll hanlder

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

Signed-off-by: Divy Le Ray <divy@chelsio.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>

authored by Divy Le Ray and committed by Jeff Garzik 890de332 e360b562

+13 -4
+13 -3
drivers/net/cxgb3/cxgb3_main.c
··· 2071 2071 static void cxgb_netpoll(struct net_device *dev) 2072 2072 { 2073 2073 struct adapter *adapter = dev->priv; 2074 - struct sge_qset *qs = dev2qset(dev); 2074 + struct port_info *pi = netdev_priv(dev); 2075 + int qidx; 2075 2076 2076 - t3_intr_handler(adapter, qs->rspq.polling) (adapter->pdev->irq, 2077 - adapter); 2077 + for (qidx = pi->first_qset; qidx < pi->first_qset + pi->nqsets; qidx++) { 2078 + struct sge_qset *qs = &adapter->sge.qs[qidx]; 2079 + void *source; 2080 + 2081 + if (adapter->flags & USING_MSIX) 2082 + source = qs; 2083 + else 2084 + source = adapter; 2085 + 2086 + t3_intr_handler(adapter, qs->rspq.polling) (0, source); 2087 + } 2078 2088 } 2079 2089 #endif 2080 2090
-1
drivers/net/cxgb3/sge.c
··· 2217 2217 struct sge_rspq *q = &qs->rspq; 2218 2218 2219 2219 spin_lock(&q->lock); 2220 - BUG_ON(napi_is_scheduled(qs->netdev)); 2221 2220 2222 2221 if (handle_responses(adap, q) < 0) 2223 2222 q->unhandled_irqs++;