a8a466
From 79caef2412a36c3ed223be7e35395b41e99c6c4c Mon Sep 17 00:00:00 2001
a8a466
From: Suganath Prabu Subramani <suganath-prabu.subramani@broadcom.com>
a8a466
Date: Wed, 26 Oct 2016 13:34:33 +0530
a8a466
Subject: [PATCH 02/11] scsi: mpt3sas: Fix for incorrect numbers for MSIX
a8a466
 vectors enabled when non RDPQ card is enumerated first.
a8a466
a8a466
No. of MSIX vectors supported = min (Total no. of CPU cores,
a8a466
MSIX vectors supported by card)
a8a466
a8a466
when RDPQ is disabled "max_msix_vectors" module parameter which was
a8a466
declared as global was set to '8' and hence if there are more than one card
a8a466
in system among which if RDPQ disabled card is enumerated first then only 8
a8a466
MSIX vectors was getting enabled for all the cards(including RDPQ enabled
a8a466
card,which can support more than 8 MSIX vectors).
a8a466
a8a466
Used local variable instead of global variable ,if RDPQ is disabled this
a8a466
local variable is set to '8' else it is set to "max_msix_vectors" (by
a8a466
default this is set to -1, whose value can be set by user during driver
a8a466
load time).So now regardless of whether RDPQ disabled card is enumerated
a8a466
first or RDPQ enabled card is enumerated first , MSIX vectors enabled
a8a466
depends on the cards capability.
a8a466
a8a466
Signed-off-by: Chaitra P B <chaitra.basappa@broadcom.com>
a8a466
Signed-off-by: Sathya Prakash <sathya.prakash@broadcom.com>
a8a466
Signed-off-by: Suganath Prabu S <suganath-prabu.subramani@broadcom.com>
a8a466
Reviewed-by: Hannes Reinecke <hare@suse.com>
a8a466
Reviewed-by: Tomas Henzl <thenzl@redhat.com>
a8a466
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
a8a466
---
a8a466
 drivers/scsi/mpt3sas/mpt3sas_base.c | 12 +++++++-----
a8a466
 1 file changed, 7 insertions(+), 5 deletions(-)
a8a466
a8a466
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
a8a466
index c77c31c..2319db8 100644
a8a466
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
a8a466
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
a8a466
@@ -1960,7 +1960,7 @@ _base_enable_msix(struct MPT3SAS_ADAPTER *ioc)
a8a466
 {
a8a466
 	struct msix_entry *entries, *a;
a8a466
 	int r;
a8a466
-	int i;
a8a466
+	int i, local_max_msix_vectors;
a8a466
 	u8 try_msix = 0;
a8a466
 
a8a466
 	if (msix_disable == -1 || msix_disable == 0)
a8a466
@@ -1980,13 +1980,15 @@ _base_enable_msix(struct MPT3SAS_ADAPTER *ioc)
a8a466
 	  ioc->cpu_count, max_msix_vectors);
a8a466
 
a8a466
 	if (!ioc->rdpq_array_enable && max_msix_vectors == -1)
a8a466
-		max_msix_vectors = 8;
a8a466
+		local_max_msix_vectors = 8;
a8a466
+	else
a8a466
+		local_max_msix_vectors = max_msix_vectors;
a8a466
 
a8a466
-	if (max_msix_vectors > 0) {
a8a466
-		ioc->reply_queue_count = min_t(int, max_msix_vectors,
a8a466
+	if (local_max_msix_vectors > 0) {
a8a466
+		ioc->reply_queue_count = min_t(int, local_max_msix_vectors,
a8a466
 			ioc->reply_queue_count);
a8a466
 		ioc->msix_vector_count = ioc->reply_queue_count;
a8a466
-	} else if (max_msix_vectors == 0)
a8a466
+	} else if (local_max_msix_vectors == 0)
a8a466
 		goto try_ioapic;
a8a466
 
a8a466
 	if (ioc->msix_vector_count < ioc->cpu_count)
a8a466
-- 
a8a466
1.8.3.1
a8a466