linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] megaraid_sas: Update for scsi for-next
@ 2014-07-01  0:19 Adam Radford
  2014-07-01  0:19 ` [PATCH 1/4] megaraid_sas: Fix reset_mutex leak Adam Radford
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Adam Radford @ 2014-07-01  0:19 UTC (permalink / raw)
  To: linux-scsi, kashyap.desai, sumit.saxena, uday.lingala; +Cc: Adam Radford

(Re-sending with git-send-email on advice of Martin Petersen @ Oracle)

James/linux-scsi,

The following patch series for megaraid_sas brings the driver up to
v06.803.02.00-rc1.

1. Fix reset_mutex leak in megasas_reset_fusion().
2. Remove unused variables in megasas_instance.
3. Fix LD/VF affiliation parsing.
4. Version and Changelog update.

Adam Radford (4):
  megaraid_sas: Fix reset_mutex leak
  megaraid_sas: Removed unused variables in megasas_instance
  megaraid_sas: Fix LD/VF affiliation parsing
  megaraid_sas: Version and Changelog update

 Documentation/scsi/ChangeLog.megaraid_sas   | 13 +++++
 drivers/scsi/megaraid/megaraid_sas.h        |  9 ++-
 drivers/scsi/megaraid/megaraid_sas_base.c   | 90 ++++++++++++++++++++---------
 drivers/scsi/megaraid/megaraid_sas_fusion.c |  1 +
 4 files changed, 82 insertions(+), 31 deletions(-)

-- 
1.7.11.7


^ permalink raw reply	[flat|nested] 9+ messages in thread
* [PATCH 3/4] megaraid_sas: Fix LD/VF affiliation parsing
@ 2014-06-20  0:32 adam radford
  2014-06-26  2:08 ` Martin K. Petersen
  0 siblings, 1 reply; 9+ messages in thread
From: adam radford @ 2014-06-20  0:32 UTC (permalink / raw)
  To: linux-scsi, kashyap.desai, sumit.saxena, uday.lingala

[-- Attachment #1: Type: text/plain, Size: 4110 bytes --]

James/linux-scsi,

The following patch for megaraid_sas fixes the LD/VF affiliation
policy parsing code to account for LD targetId's and Hidden LD's (not
yet affiliated with any Virtual Functions).

Signed-off-by: Adam Radford <aradford@gmail.com>

diff -Naur scsi-for-next.old/drivers/scsi/megaraid/megaraid_sas_base.c
scsi-for-next.new/drivers/scsi/megaraid/megaraid_sas_base.c
--- scsi-for-next.old/drivers/scsi/megaraid/megaraid_sas_base.c
2014-06-19 15:03:05.000000000 -0700
+++ scsi-for-next.new/drivers/scsi/megaraid/megaraid_sas_base.c
2014-06-19 15:53:26.537229974 -0700
@@ -1836,7 +1836,7 @@
  struct MR_LD_VF_MAP *newmap = NULL, *savedmap = NULL;
  dma_addr_t new_affiliation_h;
  dma_addr_t new_affiliation_111_h;
- int ld, retval = 0;
+ int ld, i, j, retval = 0, found = 0, doscan = 0;
  u8 thisVf;

  cmd = megasas_get_cmd(instance);
@@ -1944,14 +1944,6 @@

  if (!initial) {
  if (instance->PlasmaFW111) {
- if (!new_affiliation_111->vdCount) {
- printk(KERN_WARNING "megasas: SR-IOV: Got new "
-       "LD/VF affiliation for passive path "
-       "for scsi%d.\n",
- instance->host->host_no);
- retval = 1;
- goto out;
- }
  thisVf = new_affiliation_111->thisVf;
  for (ld = 0 ; ld < new_affiliation_111->vdCount; ld++)
  if (instance->vf_affiliation_111->map[ld].policy[thisVf] !=
new_affiliation_111->map[ld].policy[thisVf]) {
@@ -1977,29 +1969,75 @@
  newmap = new_affiliation->map;
  savedmap = instance->vf_affiliation->map;
  thisVf = new_affiliation->thisVf;
- for (ld = 0 ; ld < new_affiliation->ldCount; ld++) {
- if (savedmap->policy[thisVf] !=
-    newmap->policy[thisVf]) {
- printk(KERN_WARNING "megasas: SR-IOV: "
-       "Got new LD/VF affiliation "
-       "for scsi%d.\n",
- instance->host->host_no);
- memcpy(instance->vf_affiliation,
-       new_affiliation,
-       new_affiliation->size);
- retval = 1;
+ for (i = 0 ; i < new_affiliation->ldCount; i++) {
+ found = 0;
+ for (j = 0;
+     j < instance->vf_affiliation->ldCount;
+     j++) {
+ if (newmap->ref.targetId ==
+    savedmap->ref.targetId) {
+ found = 1;
+ if (newmap->policy[thisVf] !=
+    savedmap->policy[thisVf]) {
+ doscan = 1;
+ goto out;
+ }
+ }
+ savedmap =
+  (struct MR_LD_VF_MAP *)
+  ((unsigned char *)savedmap +
+   savedmap->size);
+ }
+ if (!found && newmap->policy[thisVf] !=
+    MR_LD_ACCESS_HIDDEN) {
+ doscan = 1;
  goto out;
  }
- savedmap = (struct MR_LD_VF_MAP *)
- ((unsigned char *)savedmap +
- savedmap->size);
  newmap = (struct MR_LD_VF_MAP *)
- ((unsigned char *)newmap +
- newmap->size);
+  ((unsigned char *)newmap + newmap->size);
+ }
+
+ newmap = new_affiliation->map;
+ savedmap = instance->vf_affiliation->map;
+
+ for (i = 0 ; i < instance->vf_affiliation->ldCount;
+     i++) {
+ found = 0;
+ for (j = 0 ; j < new_affiliation->ldCount;
+     j++) {
+ if (savedmap->ref.targetId ==
+    newmap->ref.targetId) {
+ found = 1;
+ if (savedmap->policy[thisVf] !=
+    newmap->policy[thisVf]) {
+ doscan = 1;
+ goto out;
+ }
+ }
+ newmap = (struct MR_LD_VF_MAP *)
+  ((unsigned char *)newmap +
+   newmap->size);
+ }
+ if (!found && savedmap->policy[thisVf] !=
+    MR_LD_ACCESS_HIDDEN) {
+ doscan = 1;
+ goto out;
+ }
+ savedmap = (struct MR_LD_VF_MAP *)
+  ((unsigned char *)savedmap +
+   savedmap->size);
  }
  }
  }
 out:
+ if (doscan) {
+ printk(KERN_WARNING "megasas: SR-IOV: Got new LD/VF "
+       "affiliation for scsi%d.\n", instance->host->host_no);
+ memcpy(instance->vf_affiliation, new_affiliation,
+       new_affiliation->size);
+ retval = 1;
+ }
+
  if (new_affiliation) {
  if (instance->PlasmaFW111)
  pci_free_consistent(instance->pdev,
diff -Naur scsi-for-next.old/drivers/scsi/megaraid/megaraid_sas.h
scsi-for-next.new/drivers/scsi/megaraid/megaraid_sas.h
--- scsi-for-next.old/drivers/scsi/megaraid/megaraid_sas.h 2014-06-19
15:31:49.110125604 -0700
+++ scsi-for-next.new/drivers/scsi/megaraid/megaraid_sas.h 2014-06-19
15:42:37.229075664 -0700
@@ -1659,6 +1659,7 @@
 /* Plasma 1.11 FW backward compatibility structures */
 #define IOV_111_OFFSET 0x7CE
 #define MAX_VIRTUAL_FUNCTIONS 8
+#define MR_LD_ACCESS_HIDDEN 15

 struct IOV_111 {
  u8 maxVFsSupported;

[-- Attachment #2: megaraid_sas.patch3 --]
[-- Type: application/octet-stream, Size: 4205 bytes --]

diff -Naur scsi-for-next.old/drivers/scsi/megaraid/megaraid_sas_base.c scsi-for-next.new/drivers/scsi/megaraid/megaraid_sas_base.c
--- scsi-for-next.old/drivers/scsi/megaraid/megaraid_sas_base.c	2014-06-19 15:03:05.000000000 -0700
+++ scsi-for-next.new/drivers/scsi/megaraid/megaraid_sas_base.c	2014-06-19 15:53:26.537229974 -0700
@@ -1836,7 +1836,7 @@
 	struct MR_LD_VF_MAP *newmap = NULL, *savedmap = NULL;
 	dma_addr_t new_affiliation_h;
 	dma_addr_t new_affiliation_111_h;
-	int ld, retval = 0;
+	int ld, i, j, retval = 0, found = 0, doscan = 0;
 	u8 thisVf;
 
 	cmd = megasas_get_cmd(instance);
@@ -1944,14 +1944,6 @@
 
 	if (!initial) {
 		if (instance->PlasmaFW111) {
-			if (!new_affiliation_111->vdCount) {
-				printk(KERN_WARNING "megasas: SR-IOV: Got new "
-				       "LD/VF affiliation for passive path "
-				       "for scsi%d.\n",
-					instance->host->host_no);
-				retval = 1;
-				goto out;
-			}
 			thisVf = new_affiliation_111->thisVf;
 			for (ld = 0 ; ld < new_affiliation_111->vdCount; ld++)
 				if (instance->vf_affiliation_111->map[ld].policy[thisVf] != new_affiliation_111->map[ld].policy[thisVf]) {
@@ -1977,29 +1969,75 @@
 			newmap = new_affiliation->map;
 			savedmap = instance->vf_affiliation->map;
 			thisVf = new_affiliation->thisVf;
-			for (ld = 0 ; ld < new_affiliation->ldCount; ld++) {
-				if (savedmap->policy[thisVf] !=
-				    newmap->policy[thisVf]) {
-					printk(KERN_WARNING "megasas: SR-IOV: "
-					       "Got new LD/VF affiliation "
-					       "for scsi%d.\n",
-						instance->host->host_no);
-					memcpy(instance->vf_affiliation,
-					       new_affiliation,
-					       new_affiliation->size);
-					retval = 1;
+			for (i = 0 ; i < new_affiliation->ldCount; i++) {
+				found = 0;
+				for (j = 0;
+				     j < instance->vf_affiliation->ldCount;
+				     j++) {
+					if (newmap->ref.targetId ==
+					    savedmap->ref.targetId) {
+						found = 1;
+						if (newmap->policy[thisVf] !=
+						    savedmap->policy[thisVf]) {
+							doscan = 1;
+							goto out;
+						}
+					}
+					savedmap =
+					  (struct MR_LD_VF_MAP *)
+					  ((unsigned char *)savedmap +
+					   savedmap->size);
+				}
+				if (!found && newmap->policy[thisVf] !=
+				    MR_LD_ACCESS_HIDDEN) {
+					doscan = 1;
 					goto out;
 				}
-				savedmap = (struct MR_LD_VF_MAP *)
-					((unsigned char *)savedmap +
-					 savedmap->size);
 				newmap = (struct MR_LD_VF_MAP *)
-					((unsigned char *)newmap +
-					 newmap->size);
+				  ((unsigned char *)newmap + newmap->size);
+			}
+
+			newmap = new_affiliation->map;
+			savedmap = instance->vf_affiliation->map;
+
+			for (i = 0 ; i < instance->vf_affiliation->ldCount;
+			     i++) {
+				found = 0;
+				for (j = 0 ; j < new_affiliation->ldCount;
+				     j++) {
+					if (savedmap->ref.targetId ==
+					    newmap->ref.targetId) {
+						found = 1;
+						if (savedmap->policy[thisVf] !=
+						    newmap->policy[thisVf]) {
+							doscan = 1;
+							goto out;
+						}
+					}
+					newmap = (struct MR_LD_VF_MAP *)
+					  ((unsigned char *)newmap +
+					   newmap->size);
+				}
+				if (!found && savedmap->policy[thisVf] !=
+				    MR_LD_ACCESS_HIDDEN) {
+					doscan = 1;
+					goto out;
+				}
+				savedmap = (struct MR_LD_VF_MAP *)
+				  ((unsigned char *)savedmap +
+				   savedmap->size);
 			}
 		}
 	}
 out:
+	if (doscan) {
+		printk(KERN_WARNING "megasas: SR-IOV: Got new LD/VF "
+		       "affiliation for scsi%d.\n", instance->host->host_no);
+		memcpy(instance->vf_affiliation, new_affiliation,
+		       new_affiliation->size);
+		retval = 1;
+	}
+
 	if (new_affiliation) {
 		if (instance->PlasmaFW111)
 			pci_free_consistent(instance->pdev,
diff -Naur scsi-for-next.old/drivers/scsi/megaraid/megaraid_sas.h scsi-for-next.new/drivers/scsi/megaraid/megaraid_sas.h
--- scsi-for-next.old/drivers/scsi/megaraid/megaraid_sas.h	2014-06-19 15:31:49.110125604 -0700
+++ scsi-for-next.new/drivers/scsi/megaraid/megaraid_sas.h	2014-06-19 15:42:37.229075664 -0700
@@ -1659,6 +1659,7 @@
 /* Plasma 1.11 FW backward compatibility structures */
 #define IOV_111_OFFSET 0x7CE
 #define MAX_VIRTUAL_FUNCTIONS 8
+#define MR_LD_ACCESS_HIDDEN 15
 
 struct IOV_111 {
 	u8 maxVFsSupported;

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2014-07-03 23:17 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-07-01  0:19 [PATCH 0/4] megaraid_sas: Update for scsi for-next Adam Radford
2014-07-01  0:19 ` [PATCH 1/4] megaraid_sas: Fix reset_mutex leak Adam Radford
2014-07-01  0:19 ` [PATCH 2/4] megaraid_sas: Removed unused variables in megasas_instance Adam Radford
2014-07-01  0:19 ` [PATCH 3/4] megaraid_sas: Fix LD/VF affiliation parsing Adam Radford
2014-07-03  8:18   ` Christoph Hellwig
2014-07-03 23:17     ` adam radford
2014-07-01  0:19 ` [PATCH 4/4] megaraid_sas: Version and Changelog update Adam Radford
  -- strict thread matches above, loose matches on Subject: below --
2014-06-20  0:32 [PATCH 3/4] megaraid_sas: Fix LD/VF affiliation parsing adam radford
2014-06-26  2:08 ` Martin K. Petersen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).