From: Marcus Barrow <mbarrow@redhat.com> Date: Tue, 18 Dec 2007 23:27:43 -0500 Subject: [scsi] qla2xxx: msi-x hardware issues on platforms Message-id: 20071219042743.16736.15907.sendpatchset@shell.boston.redhat.com O-Subject: [Bug 253629][QLogic][RHEL 5.2 feat 6/6]Update qla2xxx - MSI-X hardware issues on some platforms Bugzilla: 253629 BZ 253629 Update qla2xxx - MSI-X hardware issues on some platforms This patch restricts enablement of MSI/MSI-X on select ISP2432-type HBAs. It was requested and tested by the vendor. This patch also corrects a spelling error of the module parameter to enable MSI-X from ql2x_enable_msix to ql2xenablemsix. This corrected spelling matches other distros, documentation and pending upstream commits. Applied and tested on 2.6.18-53.el5. Acked-by: Jon Masters <jcm@redhat.com> Acked-by: Chip Coldwell <coldwell@redhat.com> diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index d642bbc..7ebd20f 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h @@ -63,7 +63,7 @@ extern int ql2xfdmienable; extern int ql2xallocfwdump; extern int ql2xextended_error_logging; extern int ql2xqfullrampup; -extern int ql2x_enable_msix; +extern int ql2xenablemsix; extern int num_hosts; /* diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 13e578f..1d408d1 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -1828,7 +1828,7 @@ qla2x00_request_irqs(scsi_qla_host_t *ha) int ret; /* If possible, enable MSI-X. */ - if ((!IS_QLA2432(ha) && !IS_QLA2532(ha)) || !ql2x_enable_msix) + if ((!IS_QLA2432(ha) && !IS_QLA2532(ha)) || !ql2xenablemsix) goto skip_msix; if (IS_QLA2432(ha) && (ha->chip_revision < QLA_MSIX_CHIP_REV_24XX || @@ -1840,6 +1840,17 @@ qla2x00_request_irqs(scsi_qla_host_t *ha) goto skip_msix; } + if (ha->pdev->subsystem_vendor == PCI_VENDOR_ID_HP && + (ha->pdev->subsystem_device == 0x7040 || + ha->pdev->subsystem_device == 0x7041 || + ha->pdev->subsystem_device == 0x1705)) { + DEBUG2(qla_printk(KERN_WARNING, ha, + "MSI-X: Unsupported ISP2432 SSVID/SSDID (0x%X, 0x%X).\n", + ha->pdev->subsystem_vendor, + ha->pdev->subsystem_device)); + goto skip_msi; + } + ret = qla24xx_enable_msix(ha); if (!ret) { DEBUG2(qla_printk(KERN_INFO, ha, diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 20d86fa..8b7797a 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -91,9 +91,9 @@ MODULE_PARM_DESC(ql2xqfullrampup, "depth for a device after a queue-full condition has been " "detected. Default is 120 seconds."); -int ql2x_enable_msix = 0; -module_param(ql2x_enable_msix, int, S_IRUGO|S_IRUSR); -MODULE_PARM_DESC(ql2x_enable_msix, +int ql2xenablemsix = 0; +module_param(ql2xenablemsix, int, S_IRUGO|S_IRUSR); +MODULE_PARM_DESC(ql2xenablemsix, "Set to enable MSI-X interrupt mechanism."); /*