aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/s2io.c
diff options
context:
space:
mode:
authorSivakumar Subramani <Sivakumar.Subramani@neterion.com>2007-02-24 01:51:50 -0500
committerJeff Garzik <jeff@garzik.org>2007-02-27 04:27:11 -0500
commitfb6a825b09a2311624e9cac20e643d9d7ef602dc (patch)
treecd3d582bf9a2e7a2941e0d11ec0262780aa15777 /drivers/net/s2io.c
parented227dcc2d998c8e0616449db06f7ef892cb17fc (diff)
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>
Diffstat (limited to 'drivers/net/s2io.c')
-rw-r--r--drivers/net/s2io.c35
1 files changed, 28 insertions, 7 deletions
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c
index fd85648d98d1..7cc07c8e7076 100644
--- a/drivers/net/s2io.c
+++ b/drivers/net/s2io.c
@@ -6112,7 +6112,7 @@ static int s2io_add_isr(struct s2io_nic * sp)
6112 } 6112 }
6113 } 6113 }
6114 if (sp->intr_type == MSI_X) { 6114 if (sp->intr_type == MSI_X) {
6115 int i; 6115 int i, msix_tx_cnt=0,msix_rx_cnt=0;
6116 6116
6117 for (i=1; (sp->s2io_entries[i].in_use == MSIX_FLG); i++) { 6117 for (i=1; (sp->s2io_entries[i].in_use == MSIX_FLG); i++) {
6118 if (sp->s2io_entries[i].type == MSIX_FIFO_TYPE) { 6118 if (sp->s2io_entries[i].type == MSIX_FIFO_TYPE) {
@@ -6121,16 +6121,36 @@ static int s2io_add_isr(struct s2io_nic * sp)
6121 err = request_irq(sp->entries[i].vector, 6121 err = request_irq(sp->entries[i].vector,
6122 s2io_msix_fifo_handle, 0, sp->desc[i], 6122 s2io_msix_fifo_handle, 0, sp->desc[i],
6123 sp->s2io_entries[i].arg); 6123 sp->s2io_entries[i].arg);
6124 DBG_PRINT(ERR_DBG, "%s @ 0x%llx\n", sp->desc[i], 6124 /* If either data or addr is zero print it */
6125 (unsigned long long)sp->msix_info[i].addr); 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 } else { 6136 } else {
6127 sprintf(sp->desc[i], "%s:MSI-X-%d-RX", 6137 sprintf(sp->desc[i], "%s:MSI-X-%d-RX",
6128 dev->name, i); 6138 dev->name, i);
6129 err = request_irq(sp->entries[i].vector, 6139 err = request_irq(sp->entries[i].vector,
6130 s2io_msix_ring_handle, 0, sp->desc[i], 6140 s2io_msix_ring_handle, 0, sp->desc[i],
6131 sp->s2io_entries[i].arg); 6141 sp->s2io_entries[i].arg);
6132 DBG_PRINT(ERR_DBG, "%s @ 0x%llx\n", sp->desc[i], 6142 /* If either data or addr is zero print it */
6133 (unsigned long long)sp->msix_info[i].addr); 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 if (err) { 6155 if (err) {
6136 DBG_PRINT(ERR_DBG,"%s:MSI-X-%d registration " 6156 DBG_PRINT(ERR_DBG,"%s:MSI-X-%d registration "
@@ -6140,6 +6160,8 @@ static int s2io_add_isr(struct s2io_nic * sp)
6140 } 6160 }
6141 sp->s2io_entries[i].in_use = MSIX_REGISTERED_SUCCESS; 6161 sp->s2io_entries[i].in_use = MSIX_REGISTERED_SUCCESS;
6142 } 6162 }
6163 printk("MSI-X-TX %d entries enabled\n",msix_tx_cnt);
6164 printk("MSI-X-RX %d entries enabled\n",msix_rx_cnt);
6143 } 6165 }
6144 if (sp->intr_type == INTA) { 6166 if (sp->intr_type == INTA) {
6145 err = request_irq((int) sp->pdev->irq, s2io_isr, IRQF_SHARED, 6167 err = request_irq((int) sp->pdev->irq, s2io_isr, IRQF_SHARED,
@@ -6704,8 +6726,7 @@ static int s2io_verify_parm(struct pci_dev *pdev, u8 *dev_intr_type)
6704 "Defaulting to INTA\n"); 6726 "Defaulting to INTA\n");
6705 *dev_intr_type = INTA; 6727 *dev_intr_type = INTA;
6706 } 6728 }
6707 if ( (rx_ring_num > 1) && (*dev_intr_type != INTA) ) 6729
6708 napi = 0;
6709 if (rx_ring_mode > 3) { 6730 if (rx_ring_mode > 3) {
6710 DBG_PRINT(ERR_DBG, "s2io: Requested ring mode not supported\n"); 6731 DBG_PRINT(ERR_DBG, "s2io: Requested ring mode not supported\n");
6711 DBG_PRINT(ERR_DBG, "s2io: Defaulting to 3-buffer mode\n"); 6732 DBG_PRINT(ERR_DBG, "s2io: Defaulting to 3-buffer mode\n");