All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] hpsa update
@ 2016-07-01 18:37 Don Brace
  2016-07-01 18:37 ` [PATCH 1/2] hpsa: correct skipping masked peripherals Don Brace
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Don Brace @ 2016-07-01 18:37 UTC (permalink / raw)
  To: jejb, Viswas.G, Mahesh.Rajashekhara, hch, scott.teel,
	Kevin.Barnett, Justin.Lindley, scott.benesh, elliott
  Cc: linux-scsi

These patches are based on Linus's tree

The changes are:
 - enhanced check for skipping masked devices
 - corrected hpsa_passthru_ioctl timeouts for fw flash

---

Don Brace (2):
      hpsa: correct skipping masked peripherals
      hpsa: change hpsa_passthru_ioctl timeout


 drivers/scsi/hpsa.c |   83 +++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 76 insertions(+), 7 deletions(-)

--
Signature

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

* [PATCH 1/2] hpsa: correct skipping masked peripherals
  2016-07-01 18:37 [PATCH 0/2] hpsa update Don Brace
@ 2016-07-01 18:37 ` Don Brace
  2016-07-01 18:37 ` [PATCH 2/2] hpsa: change hpsa_passthru_ioctl timeout Don Brace
  2016-07-15 19:41 ` [PATCH 0/2] hpsa update Martin K. Petersen
  2 siblings, 0 replies; 4+ messages in thread
From: Don Brace @ 2016-07-01 18:37 UTC (permalink / raw)
  To: jejb, Viswas.G, Mahesh.Rajashekhara, hch, scott.teel,
	Kevin.Barnett, Justin.Lindley, scott.benesh, elliott
  Cc: linux-scsi

The SA controller spins down RAID drive spares.

A REGNEWD event causes an inquiry to be sent to all physical
drives. This causes the SA controller to spin up the spare.

The controller suspends all I/O to a logical volume until
the spare is spun up. The spin-up can take over 50 seconds.

This can result in one or both of the following:
 - SML sends down aborts and resets to the logical volume
   and can cause the logical volume to be off-lined.
 - a negative impact on the logical volume's I/O performance
   each time a REGNEWD is triggered.

Reviewed-by: Scott Teel <scott.teel@microsemi.com>
Reviewed-by: Kevin Barnett <kevin.barnett@microsemi.com>
Signed-off-by: Don Brace <don.brace@microsemi.com>
---
 drivers/scsi/hpsa.c |   79 ++++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 74 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
index ff8dcd5..375a396 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -4105,6 +4105,70 @@ static int hpsa_set_local_logical_count(struct ctlr_info *h,
 	return rc;
 }
 
+static bool hpsa_is_disk_spare(struct ctlr_info *h, u8 *lunaddrbytes)
+{
+	struct bmic_identify_physical_device *id_phys;
+	bool is_spare = false;
+	int rc;
+
+	id_phys = kzalloc(sizeof(*id_phys), GFP_KERNEL);
+	if (!id_phys)
+		return false;
+
+	rc = hpsa_bmic_id_physical_device(h,
+					lunaddrbytes,
+					GET_BMIC_DRIVE_NUMBER(lunaddrbytes),
+					id_phys, sizeof(*id_phys));
+	if (rc == 0)
+		is_spare = (id_phys->more_flags >> 6) & 0x01;
+
+	kfree(id_phys);
+	return is_spare;
+}
+
+#define RPL_DEV_FLAG_NON_DISK                           0x1
+#define RPL_DEV_FLAG_UNCONFIG_DISK_REPORTING_SUPPORTED  0x2
+#define RPL_DEV_FLAG_UNCONFIG_DISK                      0x4
+
+#define BMIC_DEVICE_TYPE_ENCLOSURE  6
+
+static bool hpsa_skip_device(struct ctlr_info *h, u8 *lunaddrbytes,
+				struct ext_report_lun_entry *rle)
+{
+	u8 device_flags;
+	u8 device_type;
+
+	if (!MASKED_DEVICE(lunaddrbytes))
+		return false;
+
+	device_flags = rle->device_flags;
+	device_type = rle->device_type;
+
+	if (device_flags & RPL_DEV_FLAG_NON_DISK) {
+		if (device_type == BMIC_DEVICE_TYPE_ENCLOSURE)
+			return false;
+		return true;
+	}
+
+	if (!(device_flags & RPL_DEV_FLAG_UNCONFIG_DISK_REPORTING_SUPPORTED))
+		return false;
+
+	if (device_flags & RPL_DEV_FLAG_UNCONFIG_DISK)
+		return false;
+
+	/*
+	 * Spares may be spun down, we do not want to
+	 * do an Inquiry to a RAID set spare drive as
+	 * that would have them spun up, that is a
+	 * performance hit because I/O to the RAID device
+	 * stops while the spin up occurs which can take
+	 * over 50 seconds.
+	 */
+	if (hpsa_is_disk_spare(h, lunaddrbytes))
+		return true;
+
+	return false;
+}
 
 static void hpsa_update_scsi_devices(struct ctlr_info *h)
 {
@@ -4198,6 +4262,7 @@ static void hpsa_update_scsi_devices(struct ctlr_info *h)
 		u8 *lunaddrbytes, is_OBDR = 0;
 		int rc = 0;
 		int phys_dev_index = i - (raid_ctlr_position == 0);
+		bool skip_device = false;
 
 		physical_device = i < nphysicals + (raid_ctlr_position == 0);
 
@@ -4205,11 +4270,15 @@ static void hpsa_update_scsi_devices(struct ctlr_info *h)
 		lunaddrbytes = figure_lunaddrbytes(h, raid_ctlr_position,
 			i, nphysicals, nlogicals, physdev_list, logdev_list);
 
-		/* skip masked non-disk devices */
-		if (MASKED_DEVICE(lunaddrbytes) && physical_device &&
-		   (physdev_list->LUN[phys_dev_index].device_type != 0x06) &&
-		   (physdev_list->LUN[phys_dev_index].device_flags & 0x01))
-			continue;
+		/*
+		 * Skip over some devices such as a spare.
+		 */
+		if (!tmpdevice->external && physical_device) {
+			skip_device = hpsa_skip_device(h, lunaddrbytes,
+					&physdev_list->LUN[phys_dev_index]);
+			if (skip_device)
+				continue;
+		}
 
 		/* Get device type, vendor, model, device id */
 		rc = hpsa_update_device_info(h, lunaddrbytes, tmpdevice,


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

* [PATCH 2/2] hpsa: change hpsa_passthru_ioctl timeout
  2016-07-01 18:37 [PATCH 0/2] hpsa update Don Brace
  2016-07-01 18:37 ` [PATCH 1/2] hpsa: correct skipping masked peripherals Don Brace
@ 2016-07-01 18:37 ` Don Brace
  2016-07-15 19:41 ` [PATCH 0/2] hpsa update Martin K. Petersen
  2 siblings, 0 replies; 4+ messages in thread
From: Don Brace @ 2016-07-01 18:37 UTC (permalink / raw)
  To: jejb, Viswas.G, Mahesh.Rajashekhara, hch, scott.teel,
	Kevin.Barnett, Justin.Lindley, scott.benesh, elliott
  Cc: linux-scsi

Was not alloting for FW Flash times.

Reviewed-by: Scott Teel <scott.teel@microsemi.com>
Reviewed-by: Kevin Barnett <kevin.barnett@microsemi.com>
Signed-off-by: Don Brace <don.brace@microsemi.com>
---
 drivers/scsi/hpsa.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
index 375a396..030d002 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -6524,7 +6524,7 @@ static int hpsa_passthru_ioctl(struct ctlr_info *h, void __user *argp)
 		c->SG[0].Ext = cpu_to_le32(HPSA_SG_LAST); /* not chaining */
 	}
 	rc = hpsa_scsi_do_simple_cmd(h, c, DEFAULT_REPLY_QUEUE,
-					DEFAULT_TIMEOUT);
+					NO_TIMEOUT);
 	if (iocommand.buf_size > 0)
 		hpsa_pci_unmap(h->pdev, c, 1, PCI_DMA_BIDIRECTIONAL);
 	check_ioctl_unit_attention(h, c);
@@ -6657,7 +6657,7 @@ static int hpsa_big_passthru_ioctl(struct ctlr_info *h, void __user *argp)
 		c->SG[--i].Ext = cpu_to_le32(HPSA_SG_LAST);
 	}
 	status = hpsa_scsi_do_simple_cmd(h, c, DEFAULT_REPLY_QUEUE,
-						DEFAULT_TIMEOUT);
+						NO_TIMEOUT);
 	if (sg_used)
 		hpsa_pci_unmap(h->pdev, c, sg_used, PCI_DMA_BIDIRECTIONAL);
 	check_ioctl_unit_attention(h, c);


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

* Re: [PATCH 0/2] hpsa update
  2016-07-01 18:37 [PATCH 0/2] hpsa update Don Brace
  2016-07-01 18:37 ` [PATCH 1/2] hpsa: correct skipping masked peripherals Don Brace
  2016-07-01 18:37 ` [PATCH 2/2] hpsa: change hpsa_passthru_ioctl timeout Don Brace
@ 2016-07-15 19:41 ` Martin K. Petersen
  2 siblings, 0 replies; 4+ messages in thread
From: Martin K. Petersen @ 2016-07-15 19:41 UTC (permalink / raw)
  To: Don Brace
  Cc: jejb, Viswas.G, Mahesh.Rajashekhara, hch, scott.teel,
	Kevin.Barnett, Justin.Lindley, scott.benesh, elliott, linux-scsi

>>>>> "Don" == Don Brace <don.brace@microsemi.com> writes:

Don> These patches are based on Linus's tree The changes are: - enhanced
Don> check for skipping masked devices - corrected hpsa_passthru_ioctl
Don> timeouts for fw flash

Applied to 4.8/scsi-queue.

-- 
Martin K. Petersen	Oracle Linux Engineering

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

end of thread, other threads:[~2016-07-15 19:41 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-07-01 18:37 [PATCH 0/2] hpsa update Don Brace
2016-07-01 18:37 ` [PATCH 1/2] hpsa: correct skipping masked peripherals Don Brace
2016-07-01 18:37 ` [PATCH 2/2] hpsa: change hpsa_passthru_ioctl timeout Don Brace
2016-07-15 19:41 ` [PATCH 0/2] hpsa update Martin K. Petersen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.