diff options
author | Andrew Vasquez <andrew.vasquez@qlogic.com> | 2009-01-05 14:18:06 -0500 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2009-01-07 16:49:45 -0500 |
commit | 124f85e6cc0290a85adb7e14cd90e96105f4f9fb (patch) | |
tree | 590016a8b3c7708466ff9b3c5c459a9170a9eb85 /drivers/scsi/qla2xxx | |
parent | 1ded85e2850b7b890fb6b51241429ed685ec2763 (diff) |
[SCSI] qla2xxx: Don't fallback to interrupt-polling during re-initialization with MSI-X enabled.
ROMs in recent ISPs have MSI-X support, so it's no longer
necessary for the driver to fallback to interrupt polling during
ISP re-initialization.
Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi/qla2xxx')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_def.h | 2 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_init.c | 3 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_mbx.c | 5 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_os.c | 2 |
4 files changed, 9 insertions, 3 deletions
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index fc50221d1a99..191c95de7c67 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h | |||
@@ -2370,6 +2370,8 @@ struct qla_hw_data { | |||
2370 | IS_QLA84XX(ha)) | 2370 | IS_QLA84XX(ha)) |
2371 | #define IS_QLA2XXX_MIDTYPE(ha) (IS_QLA24XX(ha) || IS_QLA84XX(ha) || \ | 2371 | #define IS_QLA2XXX_MIDTYPE(ha) (IS_QLA24XX(ha) || IS_QLA84XX(ha) || \ |
2372 | IS_QLA25XX(ha)) | 2372 | IS_QLA25XX(ha)) |
2373 | #define IS_NOPOLLING_TYPE(ha) (IS_QLA25XX(ha) && \ | ||
2374 | (ha)->flags.msix_enabled) | ||
2373 | 2375 | ||
2374 | #define IS_IIDMA_CAPABLE(ha) ((ha)->device_type & DT_IIDMA) | 2376 | #define IS_IIDMA_CAPABLE(ha) ((ha)->device_type & DT_IIDMA) |
2375 | #define IS_FWI2_CAPABLE(ha) ((ha)->device_type & DT_FWI2) | 2377 | #define IS_FWI2_CAPABLE(ha) ((ha)->device_type & DT_FWI2) |
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 521d2158d7a9..3ec6eaca96d4 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c | |||
@@ -570,6 +570,9 @@ qla24xx_reset_risc(scsi_qla_host_t *vha) | |||
570 | } | 570 | } |
571 | 571 | ||
572 | spin_unlock_irqrestore(&ha->hardware_lock, flags); | 572 | spin_unlock_irqrestore(&ha->hardware_lock, flags); |
573 | |||
574 | if (IS_NOPOLLING_TYPE(ha)) | ||
575 | ha->isp_ops->enable_intrs(ha); | ||
573 | } | 576 | } |
574 | 577 | ||
575 | /** | 578 | /** |
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index f03de8c79681..29bf8bc8731a 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c | |||
@@ -123,8 +123,7 @@ qla2x00_mailbox_command(scsi_qla_host_t *vha, mbx_cmd_t *mcp) | |||
123 | 123 | ||
124 | /* Wait for mbx cmd completion until timeout */ | 124 | /* Wait for mbx cmd completion until timeout */ |
125 | 125 | ||
126 | if (!abort_active && io_lock_on) { | 126 | if ((!abort_active && io_lock_on) || IS_NOPOLLING_TYPE(ha)) { |
127 | |||
128 | set_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags); | 127 | set_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags); |
129 | 128 | ||
130 | if (IS_FWI2_CAPABLE(ha)) | 129 | if (IS_FWI2_CAPABLE(ha)) |
@@ -218,7 +217,7 @@ qla2x00_mailbox_command(scsi_qla_host_t *vha, mbx_cmd_t *mcp) | |||
218 | /* Clean up */ | 217 | /* Clean up */ |
219 | ha->mcp = NULL; | 218 | ha->mcp = NULL; |
220 | 219 | ||
221 | if (abort_active || !io_lock_on) { | 220 | if ((abort_active || !io_lock_on) && !IS_NOPOLLING_TYPE(ha)) { |
222 | DEBUG11(printk("%s(%ld): checking for additional resp " | 221 | DEBUG11(printk("%s(%ld): checking for additional resp " |
223 | "interrupt.\n", __func__, base_vha->host_no)); | 222 | "interrupt.\n", __func__, base_vha->host_no)); |
224 | 223 | ||
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 3b1b68c1f6f2..3580c034ab0a 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c | |||
@@ -1329,6 +1329,8 @@ qla24xx_disable_intrs(struct qla_hw_data *ha) | |||
1329 | unsigned long flags = 0; | 1329 | unsigned long flags = 0; |
1330 | struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; | 1330 | struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; |
1331 | 1331 | ||
1332 | if (IS_NOPOLLING_TYPE(ha)) | ||
1333 | return; | ||
1332 | spin_lock_irqsave(&ha->hardware_lock, flags); | 1334 | spin_lock_irqsave(&ha->hardware_lock, flags); |
1333 | ha->interrupts_on = 0; | 1335 | ha->interrupts_on = 0; |
1334 | WRT_REG_DWORD(®->ictrl, 0); | 1336 | WRT_REG_DWORD(®->ictrl, 0); |