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 static void cxgb_netpoll(struct net_device *dev) 2072 { 2073 struct adapter *adapter = dev->priv; 2074 - struct sge_qset *qs = dev2qset(dev); 2075 2076 - t3_intr_handler(adapter, qs->rspq.polling) (adapter->pdev->irq, 2077 - adapter); 2078 } 2079 #endif 2080
··· 2071 static void cxgb_netpoll(struct net_device *dev) 2072 { 2073 struct adapter *adapter = dev->priv; 2074 + struct port_info *pi = netdev_priv(dev); 2075 + int qidx; 2076 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 + } 2088 } 2089 #endif 2090
-1
drivers/net/cxgb3/sge.c
··· 2217 struct sge_rspq *q = &qs->rspq; 2218 2219 spin_lock(&q->lock); 2220 - BUG_ON(napi_is_scheduled(qs->netdev)); 2221 2222 if (handle_responses(adap, q) < 0) 2223 q->unhandled_irqs++;
··· 2217 struct sge_rspq *q = &qs->rspq; 2218 2219 spin_lock(&q->lock); 2220 2221 if (handle_responses(adap, q) < 0) 2222 q->unhandled_irqs++;