Blob Blame History Raw
From: Joe Carnuccio <joe.carnuccio@qlogic.com>
Date: Tue, 9 Apr 2013 14:37:30 -0700
Subject: qla2xxx: Add module parameter for interrupt mode.
References: bnc#853689,FATE#315933
Patch-Mainline: queued in scsi-misc for v3.14

[hare: patch needs validation; not present in 4.4]

Signed-off-by: Joe Carnuccio <joe.carnuccio@qlogic.com>
Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com>
Acked-by: Hannes Reinecke <hare@suse.de>
---
 drivers/scsi/qla2xxx/qla_gbl.h |  1 +
 drivers/scsi/qla2xxx/qla_isr.c | 10 +++++++---
 drivers/scsi/qla2xxx/qla_os.c  |  8 ++++++++
 3 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
index 7686bfe..3e5254d 100644
--- a/drivers/scsi/qla2xxx/qla_gbl.h
+++ b/drivers/scsi/qla2xxx/qla_gbl.h
@@ -104,6 +104,7 @@ extern int ql2xextended_error_logging;
 extern int ql2xiidmaenable;
 extern int ql2xmaxqueues;
 extern int ql2xmultique_tag;
+extern int ql2xenablemsix;
 extern int ql2xfwloadbin;
 extern int ql2xetsenable;
 extern int ql2xshiftctondsd;
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index ccf6a7f..ce8de73 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -3110,9 +3110,10 @@ qla2x00_request_irqs(struct qla_hw_data *ha, struct rsp_que *rsp)
 	scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev);
 
 	/* If possible, enable MSI-X. */
-	if (!IS_QLA2432(ha) && !IS_QLA2532(ha) && !IS_QLA8432(ha) &&
-	    !IS_CNA_CAPABLE(ha) && !IS_QLA2031(ha) && !IS_QLAFX00(ha) &&
-	    !IS_QLA27XX(ha))
+	if (ql2xenablemsix == 0 || (!IS_QLA2432(ha) && !IS_QLA2532(ha) &&
+				    !IS_QLA8432(ha) && !IS_CNA_CAPABLE(ha) &&
+				    !IS_QLA2031(ha) && !IS_QLAFX00(ha) &&
+				    !IS_QLA27XX(ha)))
 		goto skip_msi;
 
 	if (ha->pdev->subsystem_vendor == PCI_VENDOR_ID_HP &&
@@ -3126,6 +3127,9 @@ qla2x00_request_irqs(struct qla_hw_data *ha, struct rsp_que *rsp)
 		goto skip_msi;
 	}
 
+	if (ql2xenablemsix == 2)
+		goto skip_msix;
+
 	if (IS_QLA2432(ha) && (ha->pdev->revision < QLA_MSIX_CHIP_REV_24XX)) {
 		ql_log(ql_log_warn, vha, 0x0035,
 		    "MSI-X; Unsupported ISP2432 (0x%X, 0x%X).\n",
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index bfa9a64..4e06bc1 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -155,6 +155,14 @@ MODULE_PARM_DESC(ql2xmultique_tag,
 		"Default is 0 for no affinity of request and response IO. "
 		"Set it to 1 to turn on the cpu affinity.");
 
+int ql2xenablemsix = 1;
+module_param(ql2xenablemsix, int, S_IRUGO);
+MODULE_PARM_DESC(ql2xenablemsix,
+		"Set to enable MSI or MSI-X interrupt mechanism."
+		" Default is 1, enable MSI-X interrupt mechanism."
+		" 0 -- enable traditional pin-based mechanism."
+		" 1 -- enable MSI-X interrupt mechanism."
+		" 2 -- enable MSI interrupt mechanism.");
 int ql2xfwloadbin;
 module_param(ql2xfwloadbin, int, S_IRUGO|S_IWUSR);
 MODULE_PARM_DESC(ql2xfwloadbin,
-- 
1.8.5.6