S2IO: Fixes for MSI and MSIX

- Added debug statements to print a debug message if the MSI/MSI-X vector (or)
data is zero.

- This patch removes the code that will enable NAPI for the case of single
ring and MSI-X / MSI case. There are some issue in the enabling NAPI with
MSI/MSI-X. So we are turning off NAPI in the case of MSI/MSI-X.

Signed-off-by: Sivakumar Subramani <sivakumar.subramani@neterion.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>

authored by Sivakumar Subramani and committed by Jeff Garzik fb6a825b ed227dcc

+28 -7
+28 -7
drivers/net/s2io.c
··· 6112 6112 } 6113 6113 } 6114 6114 if (sp->intr_type == MSI_X) { 6115 - int i; 6115 + int i, msix_tx_cnt=0,msix_rx_cnt=0; 6116 6116 6117 6117 for (i=1; (sp->s2io_entries[i].in_use == MSIX_FLG); i++) { 6118 6118 if (sp->s2io_entries[i].type == MSIX_FIFO_TYPE) { ··· 6121 6121 err = request_irq(sp->entries[i].vector, 6122 6122 s2io_msix_fifo_handle, 0, sp->desc[i], 6123 6123 sp->s2io_entries[i].arg); 6124 - DBG_PRINT(ERR_DBG, "%s @ 0x%llx\n", sp->desc[i], 6125 - (unsigned long long)sp->msix_info[i].addr); 6124 + /* If either data or addr is zero print it */ 6125 + if(!(sp->msix_info[i].addr && 6126 + sp->msix_info[i].data)) { 6127 + DBG_PRINT(ERR_DBG, "%s @ Addr:0x%llx" 6128 + "Data:0x%lx\n",sp->desc[i], 6129 + (unsigned long long) 6130 + sp->msix_info[i].addr, 6131 + (unsigned long) 6132 + ntohl(sp->msix_info[i].data)); 6133 + } else { 6134 + msix_tx_cnt++; 6135 + } 6126 6136 } else { 6127 6137 sprintf(sp->desc[i], "%s:MSI-X-%d-RX", 6128 6138 dev->name, i); 6129 6139 err = request_irq(sp->entries[i].vector, 6130 6140 s2io_msix_ring_handle, 0, sp->desc[i], 6131 6141 sp->s2io_entries[i].arg); 6132 - DBG_PRINT(ERR_DBG, "%s @ 0x%llx\n", sp->desc[i], 6133 - (unsigned long long)sp->msix_info[i].addr); 6142 + /* If either data or addr is zero print it */ 6143 + if(!(sp->msix_info[i].addr && 6144 + sp->msix_info[i].data)) { 6145 + DBG_PRINT(ERR_DBG, "%s @ Addr:0x%llx" 6146 + "Data:0x%lx\n",sp->desc[i], 6147 + (unsigned long long) 6148 + sp->msix_info[i].addr, 6149 + (unsigned long) 6150 + ntohl(sp->msix_info[i].data)); 6151 + } else { 6152 + msix_rx_cnt++; 6153 + } 6134 6154 } 6135 6155 if (err) { 6136 6156 DBG_PRINT(ERR_DBG,"%s:MSI-X-%d registration " ··· 6160 6140 } 6161 6141 sp->s2io_entries[i].in_use = MSIX_REGISTERED_SUCCESS; 6162 6142 } 6143 + printk("MSI-X-TX %d entries enabled\n",msix_tx_cnt); 6144 + printk("MSI-X-RX %d entries enabled\n",msix_rx_cnt); 6163 6145 } 6164 6146 if (sp->intr_type == INTA) { 6165 6147 err = request_irq((int) sp->pdev->irq, s2io_isr, IRQF_SHARED, ··· 6726 6704 "Defaulting to INTA\n"); 6727 6705 *dev_intr_type = INTA; 6728 6706 } 6729 - if ( (rx_ring_num > 1) && (*dev_intr_type != INTA) ) 6730 - napi = 0; 6707 + 6731 6708 if (rx_ring_mode > 3) { 6732 6709 DBG_PRINT(ERR_DBG, "s2io: Requested ring mode not supported\n"); 6733 6710 DBG_PRINT(ERR_DBG, "s2io: Defaulting to 3-buffer mode\n");