Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > fc11cd6e1c513a17304da94a5390f3cd > files > 3567

kernel-2.6.18-194.11.1.el5.src.rpm

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.");
 
 /*