LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH v7 0/8] mpt3sas: some bug fixes patches
@ 2018-10-31 13:23 Suganath Prabu
  2018-10-31 13:23 ` [PATCH v7 1/8] mpt3sas: Added new #define variable IOC_OPERATIONAL_WAIT_COUNT Suganath Prabu
                   ` (9 more replies)
  0 siblings, 10 replies; 12+ messages in thread
From: Suganath Prabu @ 2018-10-31 13:23 UTC (permalink / raw)
  To: linux-scsi, linux-kernel; +Cc: Sathya.Prakash, sreekanth.reddy, Suganath Prabu

V7 Change Set:
Split some patches into multiple small patches
as suggested by Bjorn Helgaas

v6 Change Set:
Incorporated changes as suggested by Andy.
In Patch 1 converted while loop to do while in
function mpt3sas_wait_for_ioc_to_operational().
And in patch 3 removed parentheses.

V5 Change Set:
V5 post has only defect fixes.
We are reworking and incorporating the suggestions from Bjorn.
And after covering tests, we ll be post Hot-Plug Surprise
 removal patches.

V4 Change Set:
Reframe split strings in print statement, to avoid

V3 Change Set:
Simplified function "mpt3sas_base_pci_device_is_available" and
made inline

V2 Change Set:
Replaced mpt3sas_base_pci_device_is_unplugged with
pci_device_is_present.

V1 Chnage Set:
In Patch 0001 - unlock mutex, if active reset is in progress.

Suganath Prabu (8):
  mpt3sas: Added new #define variable IOC_OPERATIONAL_WAIT_COUNT
  mpt3sas: Separate out mpt3sas_wait_for_ioc
  mpt3sas: Refactor mpt3sas_wait_for_ioc function
  mpt3sas: Call sas_remove_host before removing the target devices
  mpt3sas: Fix Sync cache command failure during driver unload
  mpt3sas: Don't modify EEDPTagMode field setting on SAS3.5 HBA devices
  mpt3sas: Fix driver modifying persistent data in Manufacturing page11
  mpt3sas: Bump driver version to 27.100.00.00.

 drivers/scsi/mpt3sas/mpt3sas_base.c      | 73 +++++++++++++------------
 drivers/scsi/mpt3sas/mpt3sas_base.h      |  8 ++-
 drivers/scsi/mpt3sas/mpt3sas_config.c    | 27 ++--------
 drivers/scsi/mpt3sas/mpt3sas_ctl.c       | 21 ++------
 drivers/scsi/mpt3sas/mpt3sas_scsih.c     | 38 ++++++++++++-
 drivers/scsi/mpt3sas/mpt3sas_transport.c | 91 ++++++--------------------------
 6 files changed, 106 insertions(+), 152 deletions(-)

-- 
1.8.3.1


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

* [PATCH v7 1/8] mpt3sas: Added new #define variable IOC_OPERATIONAL_WAIT_COUNT
  2018-10-31 13:23 [PATCH v7 0/8] mpt3sas: some bug fixes patches Suganath Prabu
@ 2018-10-31 13:23 ` Suganath Prabu
  2018-10-31 13:23 ` [PATCH v7 2/8] mpt3sas: Separate out mpt3sas_wait_for_ioc Suganath Prabu
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Suganath Prabu @ 2018-10-31 13:23 UTC (permalink / raw)
  To: linux-scsi, linux-kernel; +Cc: Sathya.Prakash, sreekanth.reddy, Suganath Prabu

Added new #define variable IOC_OPERATIONAL_WAIT_COUNT and
it replaces hard coded value '10' in all the places where driver is
waiting for the IOC to become operational.

Signed-off-by: Suganath Prabu <suganath-prabu.subramani@broadcom.com>
---
 drivers/scsi/mpt3sas/mpt3sas_base.c      | 4 ++--
 drivers/scsi/mpt3sas/mpt3sas_base.h      | 3 +++
 drivers/scsi/mpt3sas/mpt3sas_ctl.c       | 2 +-
 drivers/scsi/mpt3sas/mpt3sas_transport.c | 8 ++++----
 4 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index 2500377..f6c7afa 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -5230,7 +5230,7 @@ mpt3sas_base_sas_iounit_control(struct MPT3SAS_ADAPTER *ioc,
 	wait_state_count = 0;
 	ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
 	while (ioc_state != MPI2_IOC_STATE_OPERATIONAL) {
-		if (wait_state_count++ == 10) {
+		if (wait_state_count++ == IOC_OPERATIONAL_WAIT_COUNT) {
 			ioc_err(ioc, "%s: failed due to ioc not operational\n",
 				__func__);
 			rc = -EFAULT;
@@ -5325,7 +5325,7 @@ mpt3sas_base_scsi_enclosure_processor(struct MPT3SAS_ADAPTER *ioc,
 	wait_state_count = 0;
 	ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
 	while (ioc_state != MPI2_IOC_STATE_OPERATIONAL) {
-		if (wait_state_count++ == 10) {
+		if (wait_state_count++ == IOC_OPERATIONAL_WAIT_COUNT) {
 			ioc_err(ioc, "%s: failed due to ioc not operational\n",
 				__func__);
 			rc = -EFAULT;
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
index 8f1d6b0..3ce8785 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
@@ -139,6 +139,9 @@
 #define DEFAULT_NUM_FWCHAIN_ELEMTS	8
 
 #define FW_IMG_HDR_READ_TIMEOUT	15
+
+#define IOC_OPERATIONAL_WAIT_COUNT	10
+
 /*
  * NVMe defines
  */
diff --git a/drivers/scsi/mpt3sas/mpt3sas_ctl.c b/drivers/scsi/mpt3sas/mpt3sas_ctl.c
index 4afa597..a285e95 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_ctl.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_ctl.c
@@ -669,7 +669,7 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg,
 	wait_state_count = 0;
 	ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
 	while (ioc_state != MPI2_IOC_STATE_OPERATIONAL) {
-		if (wait_state_count++ == 10) {
+		if (wait_state_count++ == IOC_OPERATIONAL_WAIT_COUNT) {
 			ioc_err(ioc, "%s: failed due to ioc not operational\n",
 				__func__);
 			ret = -EFAULT;
diff --git a/drivers/scsi/mpt3sas/mpt3sas_transport.c b/drivers/scsi/mpt3sas/mpt3sas_transport.c
index 6a8a3c0..f446c05 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_transport.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_transport.c
@@ -323,7 +323,7 @@ _transport_expander_report_manufacture(struct MPT3SAS_ADAPTER *ioc,
 	wait_state_count = 0;
 	ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
 	while (ioc_state != MPI2_IOC_STATE_OPERATIONAL) {
-		if (wait_state_count++ == 10) {
+		if (wait_state_count++ == IOC_OPERATIONAL_WAIT_COUNT) {
 			ioc_err(ioc, "%s: failed due to ioc not operational\n",
 				__func__);
 			rc = -EFAULT;
@@ -1101,7 +1101,7 @@ _transport_get_expander_phy_error_log(struct MPT3SAS_ADAPTER *ioc,
 	wait_state_count = 0;
 	ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
 	while (ioc_state != MPI2_IOC_STATE_OPERATIONAL) {
-		if (wait_state_count++ == 10) {
+		if (wait_state_count++ == IOC_OPERATIONAL_WAIT_COUNT) {
 			ioc_err(ioc, "%s: failed due to ioc not operational\n",
 				__func__);
 			rc = -EFAULT;
@@ -1406,7 +1406,7 @@ _transport_expander_phy_control(struct MPT3SAS_ADAPTER *ioc,
 	wait_state_count = 0;
 	ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
 	while (ioc_state != MPI2_IOC_STATE_OPERATIONAL) {
-		if (wait_state_count++ == 10) {
+		if (wait_state_count++ == IOC_OPERATIONAL_WAIT_COUNT) {
 			ioc_err(ioc, "%s: failed due to ioc not operational\n",
 				__func__);
 			rc = -EFAULT;
@@ -1927,7 +1927,7 @@ _transport_smp_handler(struct bsg_job *job, struct Scsi_Host *shost,
 	wait_state_count = 0;
 	ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
 	while (ioc_state != MPI2_IOC_STATE_OPERATIONAL) {
-		if (wait_state_count++ == 10) {
+		if (wait_state_count++ == IOC_OPERATIONAL_WAIT_COUNT) {
 			ioc_err(ioc, "%s: failed due to ioc not operational\n",
 				__func__);
 			rc = -EFAULT;
-- 
1.8.3.1


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

* [PATCH v7 2/8] mpt3sas: Separate out mpt3sas_wait_for_ioc
  2018-10-31 13:23 [PATCH v7 0/8] mpt3sas: some bug fixes patches Suganath Prabu
  2018-10-31 13:23 ` [PATCH v7 1/8] mpt3sas: Added new #define variable IOC_OPERATIONAL_WAIT_COUNT Suganath Prabu
@ 2018-10-31 13:23 ` Suganath Prabu
  2018-10-31 13:23 ` [PATCH v7 3/8] mpt3sas: Refactor mpt3sas_wait_for_ioc function Suganath Prabu
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Suganath Prabu @ 2018-10-31 13:23 UTC (permalink / raw)
  To: linux-scsi, linux-kernel; +Cc: Sathya.Prakash, sreekanth.reddy, Suganath Prabu

No functional changes. This section of code "wait for IOC to be
operational" is used in many places across the driver.  Factor
this code out into a new mpt3sas_wait_for_ioc().

Signed-off-by: Suganath Prabu <suganath-prabu.subramani@broadcom.com>
---
 drivers/scsi/mpt3sas/mpt3sas_base.c      | 73 +++++++++++++++------------
 drivers/scsi/mpt3sas/mpt3sas_base.h      |  1 +
 drivers/scsi/mpt3sas/mpt3sas_config.c    | 23 ++-------
 drivers/scsi/mpt3sas/mpt3sas_ctl.c       | 21 ++------
 drivers/scsi/mpt3sas/mpt3sas_transport.c | 84 +++++---------------------------
 5 files changed, 61 insertions(+), 141 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index f6c7afa..3b5f28a 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -5078,6 +5078,41 @@ _base_send_ioc_reset(struct MPT3SAS_ADAPTER *ioc, u8 reset_type, int timeout)
 }
 
 /**
+ * mpt3sas_wait_for_ioc - IOC's operational state is checked here.
+ * @ioc: per adapter object
+ * @wait_count: timeout in seconds
+ *
+ * Return: Waits up to timeout seconds for the IOC to
+ * become operational. Returns 0 if IOC is present
+ * and operational; otherwise returns -EFAULT.
+ */
+
+int
+mpt3sas_wait_for_ioc(struct MPT3SAS_ADAPTER *ioc, int timeout)
+{
+	int wait_state_count = 0;
+	u32 ioc_state;
+
+	ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
+	while (ioc_state != MPI2_IOC_STATE_OPERATIONAL) {
+
+		if (wait_state_count++ == timeout) {
+			ioc_err(ioc, "%s: failed due to ioc not operational\n",
+				__func__);
+			return -EFAULT;
+		}
+		ssleep(1);
+		ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
+		ioc_info(ioc, "%s: waiting for operational state(count=%d)\n",
+			 __func__, wait_state_count);
+	}
+	if (wait_state_count)
+		ioc_info(ioc, "ioc is operational\n");
+
+	return 0;
+}
+
+/**
  * _base_handshake_req_reply_wait - send request thru doorbell interface
  * @ioc: per adapter object
  * @request_bytes: request length
@@ -5211,11 +5246,9 @@ mpt3sas_base_sas_iounit_control(struct MPT3SAS_ADAPTER *ioc,
 	Mpi2SasIoUnitControlRequest_t *mpi_request)
 {
 	u16 smid;
-	u32 ioc_state;
 	u8 issue_reset = 0;
 	int rc;
 	void *request;
-	u16 wait_state_count;
 
 	dinitprintk(ioc, ioc_info(ioc, "%s\n", __func__));
 
@@ -5227,20 +5260,9 @@ mpt3sas_base_sas_iounit_control(struct MPT3SAS_ADAPTER *ioc,
 		goto out;
 	}
 
-	wait_state_count = 0;
-	ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
-	while (ioc_state != MPI2_IOC_STATE_OPERATIONAL) {
-		if (wait_state_count++ == IOC_OPERATIONAL_WAIT_COUNT) {
-			ioc_err(ioc, "%s: failed due to ioc not operational\n",
-				__func__);
-			rc = -EFAULT;
-			goto out;
-		}
-		ssleep(1);
-		ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
-		ioc_info(ioc, "%s: waiting for operational state(count=%d)\n",
-			 __func__, wait_state_count);
-	}
+	rc = mpt3sas_wait_for_ioc(ioc, IOC_OPERATIONAL_WAIT_COUNT);
+	if (rc)
+		goto out;
 
 	smid = mpt3sas_base_get_smid(ioc, ioc->base_cb_idx);
 	if (!smid) {
@@ -5306,11 +5328,9 @@ mpt3sas_base_scsi_enclosure_processor(struct MPT3SAS_ADAPTER *ioc,
 	Mpi2SepReply_t *mpi_reply, Mpi2SepRequest_t *mpi_request)
 {
 	u16 smid;
-	u32 ioc_state;
 	u8 issue_reset = 0;
 	int rc;
 	void *request;
-	u16 wait_state_count;
 
 	dinitprintk(ioc, ioc_info(ioc, "%s\n", __func__));
 
@@ -5322,20 +5342,9 @@ mpt3sas_base_scsi_enclosure_processor(struct MPT3SAS_ADAPTER *ioc,
 		goto out;
 	}
 
-	wait_state_count = 0;
-	ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
-	while (ioc_state != MPI2_IOC_STATE_OPERATIONAL) {
-		if (wait_state_count++ == IOC_OPERATIONAL_WAIT_COUNT) {
-			ioc_err(ioc, "%s: failed due to ioc not operational\n",
-				__func__);
-			rc = -EFAULT;
-			goto out;
-		}
-		ssleep(1);
-		ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
-		ioc_info(ioc, "%s: waiting for operational state(count=%d)\n",
-			 __func__, wait_state_count);
-	}
+	rc = mpt3sas_wait_for_ioc(ioc, IOC_OPERATIONAL_WAIT_COUNT);
+	if (rc)
+		goto out;
 
 	smid = mpt3sas_base_get_smid(ioc, ioc->base_cb_idx);
 	if (!smid) {
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
index 3ce8785..4e532b0 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
@@ -1490,6 +1490,7 @@ mpt3sas_wait_for_commands_to_complete(struct MPT3SAS_ADAPTER *ioc);
 
 u8 mpt3sas_base_check_cmd_timeout(struct MPT3SAS_ADAPTER *ioc,
 	u8 status, void *mpi_request, int sz);
+int mpt3sas_wait_for_ioc(struct MPT3SAS_ADAPTER *ioc, int wait_count);
 
 /* scsih shared API */
 struct scsi_cmnd *mpt3sas_scsih_scsi_lookup_get(struct MPT3SAS_ADAPTER *ioc,
diff --git a/drivers/scsi/mpt3sas/mpt3sas_config.c b/drivers/scsi/mpt3sas/mpt3sas_config.c
index 0220944..257b66f 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_config.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_config.c
@@ -300,11 +300,9 @@ _config_request(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigRequest_t
 	void *config_page, u16 config_page_sz)
 {
 	u16 smid;
-	u32 ioc_state;
 	Mpi2ConfigRequest_t *config_request;
 	int r;
 	u8 retry_count, issue_host_reset = 0;
-	u16 wait_state_count;
 	struct config_request mem;
 	u32 ioc_status = UINT_MAX;
 
@@ -361,23 +359,10 @@ _config_request(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigRequest_t
 		ioc_info(ioc, "%s: attempting retry (%d)\n",
 			 __func__, retry_count);
 	}
-	wait_state_count = 0;
-	ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
-	while (ioc_state != MPI2_IOC_STATE_OPERATIONAL) {
-		if (wait_state_count++ == MPT3_CONFIG_PAGE_DEFAULT_TIMEOUT) {
-			ioc_err(ioc, "%s: failed due to ioc not operational\n",
-				__func__);
-			ioc->config_cmds.status = MPT3_CMD_NOT_USED;
-			r = -EFAULT;
-			goto free_mem;
-		}
-		ssleep(1);
-		ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
-		ioc_info(ioc, "%s: waiting for operational state(count=%d)\n",
-			 __func__, wait_state_count);
-	}
-	if (wait_state_count)
-		ioc_info(ioc, "%s: ioc is operational\n", __func__);
+
+	r = mpt3sas_wait_for_ioc(ioc, MPT3_CONFIG_PAGE_DEFAULT_TIMEOUT);
+	if (r)
+		goto free_mem;
 
 	smid = mpt3sas_base_get_smid(ioc, ioc->config_cb_idx);
 	if (!smid) {
diff --git a/drivers/scsi/mpt3sas/mpt3sas_ctl.c b/drivers/scsi/mpt3sas/mpt3sas_ctl.c
index a285e95..b2bb47c 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_ctl.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_ctl.c
@@ -641,7 +641,6 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg,
 	MPI2DefaultReply_t *mpi_reply;
 	Mpi26NVMeEncapsulatedRequest_t *nvme_encap_request = NULL;
 	struct _pcie_device *pcie_device = NULL;
-	u32 ioc_state;
 	u16 smid;
 	u8 timeout;
 	u8 issue_reset;
@@ -654,7 +653,6 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg,
 	dma_addr_t data_in_dma = 0;
 	size_t data_in_sz = 0;
 	long ret;
-	u16 wait_state_count;
 	u16 device_handle = MPT3SAS_INVALID_DEVICE_HANDLE;
 	u8 tr_method = MPI26_SCSITASKMGMT_MSGFLAGS_PROTOCOL_LVL_RST_PCIE;
 
@@ -666,22 +664,9 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg,
 		goto out;
 	}
 
-	wait_state_count = 0;
-	ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
-	while (ioc_state != MPI2_IOC_STATE_OPERATIONAL) {
-		if (wait_state_count++ == IOC_OPERATIONAL_WAIT_COUNT) {
-			ioc_err(ioc, "%s: failed due to ioc not operational\n",
-				__func__);
-			ret = -EFAULT;
-			goto out;
-		}
-		ssleep(1);
-		ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
-		ioc_info(ioc, "%s: waiting for operational state(count=%d)\n",
-			 __func__, wait_state_count);
-	}
-	if (wait_state_count)
-		ioc_info(ioc, "%s: ioc is operational\n", __func__);
+	ret = mpt3sas_wait_for_ioc(ioc,	IOC_OPERATIONAL_WAIT_COUNT);
+	if (ret)
+		goto out;
 
 	mpi_request = kzalloc(ioc->request_sz, GFP_KERNEL);
 	if (!mpi_request) {
diff --git a/drivers/scsi/mpt3sas/mpt3sas_transport.c b/drivers/scsi/mpt3sas/mpt3sas_transport.c
index f446c05..9685c87 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_transport.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_transport.c
@@ -296,7 +296,6 @@ _transport_expander_report_manufacture(struct MPT3SAS_ADAPTER *ioc,
 	struct rep_manu_request *manufacture_request;
 	int rc;
 	u16 smid;
-	u32 ioc_state;
 	void *psge;
 	u8 issue_reset = 0;
 	void *data_out = NULL;
@@ -304,7 +303,6 @@ _transport_expander_report_manufacture(struct MPT3SAS_ADAPTER *ioc,
 	dma_addr_t data_in_dma;
 	size_t data_in_sz;
 	size_t data_out_sz;
-	u16 wait_state_count;
 
 	if (ioc->shost_recovery || ioc->pci_error_recovery) {
 		ioc_info(ioc, "%s: host reset in progress!\n", __func__);
@@ -320,22 +318,9 @@ _transport_expander_report_manufacture(struct MPT3SAS_ADAPTER *ioc,
 	}
 	ioc->transport_cmds.status = MPT3_CMD_PENDING;
 
-	wait_state_count = 0;
-	ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
-	while (ioc_state != MPI2_IOC_STATE_OPERATIONAL) {
-		if (wait_state_count++ == IOC_OPERATIONAL_WAIT_COUNT) {
-			ioc_err(ioc, "%s: failed due to ioc not operational\n",
-				__func__);
-			rc = -EFAULT;
-			goto out;
-		}
-		ssleep(1);
-		ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
-		ioc_info(ioc, "%s: waiting for operational state(count=%d)\n",
-			 __func__, wait_state_count);
-	}
-	if (wait_state_count)
-		ioc_info(ioc, "%s: ioc is operational\n", __func__);
+	rc = mpt3sas_wait_for_ioc(ioc, IOC_OPERATIONAL_WAIT_COUNT);
+	if (rc)
+		goto out;
 
 	smid = mpt3sas_base_get_smid(ioc, ioc->transport_cb_idx);
 	if (!smid) {
@@ -1076,13 +1061,11 @@ _transport_get_expander_phy_error_log(struct MPT3SAS_ADAPTER *ioc,
 	struct phy_error_log_reply *phy_error_log_reply;
 	int rc;
 	u16 smid;
-	u32 ioc_state;
 	void *psge;
 	u8 issue_reset = 0;
 	void *data_out = NULL;
 	dma_addr_t data_out_dma;
 	u32 sz;
-	u16 wait_state_count;
 
 	if (ioc->shost_recovery || ioc->pci_error_recovery) {
 		ioc_info(ioc, "%s: host reset in progress!\n", __func__);
@@ -1098,22 +1081,9 @@ _transport_get_expander_phy_error_log(struct MPT3SAS_ADAPTER *ioc,
 	}
 	ioc->transport_cmds.status = MPT3_CMD_PENDING;
 
-	wait_state_count = 0;
-	ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
-	while (ioc_state != MPI2_IOC_STATE_OPERATIONAL) {
-		if (wait_state_count++ == IOC_OPERATIONAL_WAIT_COUNT) {
-			ioc_err(ioc, "%s: failed due to ioc not operational\n",
-				__func__);
-			rc = -EFAULT;
-			goto out;
-		}
-		ssleep(1);
-		ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
-		ioc_info(ioc, "%s: waiting for operational state(count=%d)\n",
-			 __func__, wait_state_count);
-	}
-	if (wait_state_count)
-		ioc_info(ioc, "%s: ioc is operational\n", __func__);
+	rc = mpt3sas_wait_for_ioc(ioc, IOC_OPERATIONAL_WAIT_COUNT);
+	if (rc)
+		goto out;
 
 	smid = mpt3sas_base_get_smid(ioc, ioc->transport_cb_idx);
 	if (!smid) {
@@ -1381,13 +1351,11 @@ _transport_expander_phy_control(struct MPT3SAS_ADAPTER *ioc,
 	struct phy_control_reply *phy_control_reply;
 	int rc;
 	u16 smid;
-	u32 ioc_state;
 	void *psge;
 	u8 issue_reset = 0;
 	void *data_out = NULL;
 	dma_addr_t data_out_dma;
 	u32 sz;
-	u16 wait_state_count;
 
 	if (ioc->shost_recovery || ioc->pci_error_recovery) {
 		ioc_info(ioc, "%s: host reset in progress!\n", __func__);
@@ -1403,22 +1371,9 @@ _transport_expander_phy_control(struct MPT3SAS_ADAPTER *ioc,
 	}
 	ioc->transport_cmds.status = MPT3_CMD_PENDING;
 
-	wait_state_count = 0;
-	ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
-	while (ioc_state != MPI2_IOC_STATE_OPERATIONAL) {
-		if (wait_state_count++ == IOC_OPERATIONAL_WAIT_COUNT) {
-			ioc_err(ioc, "%s: failed due to ioc not operational\n",
-				__func__);
-			rc = -EFAULT;
-			goto out;
-		}
-		ssleep(1);
-		ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
-		ioc_info(ioc, "%s: waiting for operational state(count=%d)\n",
-			 __func__, wait_state_count);
-	}
-	if (wait_state_count)
-		ioc_info(ioc, "%s: ioc is operational\n", __func__);
+	rc = mpt3sas_wait_for_ioc(ioc, IOC_OPERATIONAL_WAIT_COUNT);
+	if (rc)
+		goto out;
 
 	smid = mpt3sas_base_get_smid(ioc, ioc->transport_cb_idx);
 	if (!smid) {
@@ -1880,7 +1835,6 @@ _transport_smp_handler(struct bsg_job *job, struct Scsi_Host *shost,
 	Mpi2SmpPassthroughReply_t *mpi_reply;
 	int rc;
 	u16 smid;
-	u32 ioc_state;
 	void *psge;
 	dma_addr_t dma_addr_in;
 	dma_addr_t dma_addr_out;
@@ -1888,7 +1842,6 @@ _transport_smp_handler(struct bsg_job *job, struct Scsi_Host *shost,
 	void *addr_out = NULL;
 	size_t dma_len_in;
 	size_t dma_len_out;
-	u16 wait_state_count;
 	unsigned int reslen = 0;
 
 	if (ioc->shost_recovery || ioc->pci_error_recovery) {
@@ -1924,22 +1877,9 @@ _transport_smp_handler(struct bsg_job *job, struct Scsi_Host *shost,
 	if (rc)
 		goto unmap_out;
 
-	wait_state_count = 0;
-	ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
-	while (ioc_state != MPI2_IOC_STATE_OPERATIONAL) {
-		if (wait_state_count++ == IOC_OPERATIONAL_WAIT_COUNT) {
-			ioc_err(ioc, "%s: failed due to ioc not operational\n",
-				__func__);
-			rc = -EFAULT;
-			goto unmap_in;
-		}
-		ssleep(1);
-		ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
-		ioc_info(ioc, "%s: waiting for operational state(count=%d)\n",
-			 __func__, wait_state_count);
-	}
-	if (wait_state_count)
-		ioc_info(ioc, "%s: ioc is operational\n", __func__);
+	rc = mpt3sas_wait_for_ioc(ioc, IOC_OPERATIONAL_WAIT_COUNT);
+	if (rc)
+		goto unmap_in;
 
 	smid = mpt3sas_base_get_smid(ioc, ioc->transport_cb_idx);
 	if (!smid) {
-- 
1.8.3.1


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

* [PATCH v7 3/8] mpt3sas: Refactor mpt3sas_wait_for_ioc function
  2018-10-31 13:23 [PATCH v7 0/8] mpt3sas: some bug fixes patches Suganath Prabu
  2018-10-31 13:23 ` [PATCH v7 1/8] mpt3sas: Added new #define variable IOC_OPERATIONAL_WAIT_COUNT Suganath Prabu
  2018-10-31 13:23 ` [PATCH v7 2/8] mpt3sas: Separate out mpt3sas_wait_for_ioc Suganath Prabu
@ 2018-10-31 13:23 ` Suganath Prabu
  2018-10-31 13:23 ` [PATCH v7 4/8] mpt3sas: Call sas_remove_host before removing the target devices Suganath Prabu
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Suganath Prabu @ 2018-10-31 13:23 UTC (permalink / raw)
  To: linux-scsi, linux-kernel; +Cc: Sathya.Prakash, sreekanth.reddy, Suganath Prabu

No functional change. Doing code refactor of function
mpt3sas_wait_for_ioc() for better readability.

Signed-off-by: Suganath Prabu <suganath-prabu.subramani@broadcom.com>
---
 drivers/scsi/mpt3sas/mpt3sas_base.c | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index 3b5f28a..f25bc3c 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -5093,22 +5093,20 @@ mpt3sas_wait_for_ioc(struct MPT3SAS_ADAPTER *ioc, int timeout)
 	int wait_state_count = 0;
 	u32 ioc_state;
 
-	ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
-	while (ioc_state != MPI2_IOC_STATE_OPERATIONAL) {
-
-		if (wait_state_count++ == timeout) {
-			ioc_err(ioc, "%s: failed due to ioc not operational\n",
-				__func__);
-			return -EFAULT;
-		}
-		ssleep(1);
+	do {
 		ioc_state = mpt3sas_base_get_iocstate(ioc, 1);
+		if (ioc_state == MPI2_IOC_STATE_OPERATIONAL)
+			break;
+		ssleep(1);
 		ioc_info(ioc, "%s: waiting for operational state(count=%d)\n",
-			 __func__, wait_state_count);
+				__func__, ++wait_state_count);
+	} while (--timeout);
+	if (!timeout) {
+		ioc_err(ioc, "%s: failed due to ioc not operational\n", __func__);
+		return -EFAULT;
 	}
 	if (wait_state_count)
 		ioc_info(ioc, "ioc is operational\n");
-
 	return 0;
 }
 
-- 
1.8.3.1


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

* [PATCH v7 4/8] mpt3sas: Call sas_remove_host before removing the target devices
  2018-10-31 13:23 [PATCH v7 0/8] mpt3sas: some bug fixes patches Suganath Prabu
                   ` (2 preceding siblings ...)
  2018-10-31 13:23 ` [PATCH v7 3/8] mpt3sas: Refactor mpt3sas_wait_for_ioc function Suganath Prabu
@ 2018-10-31 13:23 ` Suganath Prabu
  2018-10-31 13:23 ` [PATCH v7 5/8] mpt3sas: Fix Sync cache command failure during driver unload Suganath Prabu
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Suganath Prabu @ 2018-10-31 13:23 UTC (permalink / raw)
  To: linux-scsi, linux-kernel; +Cc: Sathya.Prakash, sreekanth.reddy, Suganath Prabu

Call sas_remove_host() before removing the target devices in the
driver's .remove() callback function(i.e. during driver unload time).
So that driver can provide a way to allow SYNC CACHE, START STOP unit
commands etc. (which are issued from SML) to the target drives during
driver unload time.

Once sas_remove_host() is called before removing the target drives then
driver can just clean up the resources allocated for target devices and
no need to call sas_port_delete_phy(), sas_port_delete() API's as these
API's internally called from sas_remove_host().

Signed-off-by: Suganath Prabu <suganath-prabu.subramani@broadcom.com>
---
 drivers/scsi/mpt3sas/mpt3sas_scsih.c     | 2 +-
 drivers/scsi/mpt3sas/mpt3sas_transport.c | 7 +++++--
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index 4d73b5e..12f565c 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -9641,6 +9641,7 @@ static void scsih_remove(struct pci_dev *pdev)
 
 	/* release all the volumes */
 	_scsih_ir_shutdown(ioc);
+	sas_remove_host(shost);
 	list_for_each_entry_safe(raid_device, next, &ioc->raid_device_list,
 	    list) {
 		if (raid_device->starget) {
@@ -9682,7 +9683,6 @@ static void scsih_remove(struct pci_dev *pdev)
 		ioc->sas_hba.num_phys = 0;
 	}
 
-	sas_remove_host(shost);
 	mpt3sas_base_detach(ioc);
 	spin_lock(&gioc_lock);
 	list_del(&ioc->list);
diff --git a/drivers/scsi/mpt3sas/mpt3sas_transport.c b/drivers/scsi/mpt3sas/mpt3sas_transport.c
index 9685c87..60ae2d0 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_transport.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_transport.c
@@ -806,10 +806,13 @@ mpt3sas_transport_port_remove(struct MPT3SAS_ADAPTER *ioc, u64 sas_address,
 			    mpt3sas_port->remote_identify.sas_address,
 			    mpt3sas_phy->phy_id);
 		mpt3sas_phy->phy_belongs_to_port = 0;
-		sas_port_delete_phy(mpt3sas_port->port, mpt3sas_phy->phy);
+		if (!ioc->remove_host)
+			sas_port_delete_phy(mpt3sas_port->port,
+						mpt3sas_phy->phy);
 		list_del(&mpt3sas_phy->port_siblings);
 	}
-	sas_port_delete(mpt3sas_port->port);
+	if (!ioc->remove_host)
+		sas_port_delete(mpt3sas_port->port);
 	kfree(mpt3sas_port);
 }
 
-- 
1.8.3.1


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

* [PATCH v7 5/8] mpt3sas: Fix Sync cache command failure during driver unload
  2018-10-31 13:23 [PATCH v7 0/8] mpt3sas: some bug fixes patches Suganath Prabu
                   ` (3 preceding siblings ...)
  2018-10-31 13:23 ` [PATCH v7 4/8] mpt3sas: Call sas_remove_host before removing the target devices Suganath Prabu
@ 2018-10-31 13:23 ` Suganath Prabu
  2018-10-31 13:23 ` [PATCH v7 6/8] mpt3sas: Don't modify EEDPTagMode field setting on SAS3.5 HBA devices Suganath Prabu
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Suganath Prabu @ 2018-10-31 13:23 UTC (permalink / raw)
  To: linux-scsi, linux-kernel; +Cc: Sathya.Prakash, sreekanth.reddy, Suganath Prabu

This is to fix SYNC CACHE and START STOP command
failures with DID_NO_CONNECT during driver unload.

In driver's IO submission patch (i.e. in driver's .queuecommand())
driver won't allow any SCSI commands to the IOC when ioc->remove_host
flag is set and hence SYNC CACHE commands which are issued to the
target drives (where write cache is enabled) during driver unload time
is failed with DID_NO_CONNECT status.

Now modified the driver to allow SYNC CACHE and START STOP commands
to IOC, even when remove_host flag is set.

Signed-off-by: Suganath Prabu <suganath-prabu.subramani@broadcom.com>
---
 drivers/scsi/mpt3sas/mpt3sas_scsih.c | 36 +++++++++++++++++++++++++++++++++++-
 1 file changed, 35 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index 12f565c..df56cbe 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -3748,6 +3748,40 @@ _scsih_tm_tr_complete(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
 	return _scsih_check_for_pending_tm(ioc, smid);
 }
 
+/** _scsih_allow_scmd_to_device - check whether scmd needs to
+ *				 issue to IOC or not.
+ * @ioc: per adapter object
+ * @scmd: pointer to scsi command object
+ *
+ * Returns true if scmd can be issued to IOC otherwise returns false.
+ */
+inline bool _scsih_allow_scmd_to_device(struct MPT3SAS_ADAPTER *ioc,
+	struct scsi_cmnd *scmd)
+{
+
+	if (ioc->pci_error_recovery)
+		return false;
+
+	if (ioc->hba_mpi_version_belonged == MPI2_VERSION) {
+		if (ioc->remove_host)
+			return false;
+
+		return true;
+	}
+
+	if (ioc->remove_host) {
+
+		switch (scmd->cmnd[0]) {
+		case SYNCHRONIZE_CACHE:
+		case START_STOP:
+			return true;
+		default:
+			return false;
+		}
+	}
+
+	return true;
+}
 
 /**
  * _scsih_sas_control_complete - completion routine
@@ -4571,7 +4605,7 @@ scsih_qcmd(struct Scsi_Host *shost, struct scsi_cmnd *scmd)
 		return 0;
 	}
 
-	if (ioc->pci_error_recovery || ioc->remove_host) {
+	if (!(_scsih_allow_scmd_to_device(ioc, scmd))) {
 		scmd->result = DID_NO_CONNECT << 16;
 		scmd->scsi_done(scmd);
 		return 0;
-- 
1.8.3.1


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

* [PATCH v7 6/8] mpt3sas: Don't modify EEDPTagMode field setting on SAS3.5 HBA devices
  2018-10-31 13:23 [PATCH v7 0/8] mpt3sas: some bug fixes patches Suganath Prabu
                   ` (4 preceding siblings ...)
  2018-10-31 13:23 ` [PATCH v7 5/8] mpt3sas: Fix Sync cache command failure during driver unload Suganath Prabu
@ 2018-10-31 13:23 ` Suganath Prabu
  2018-10-31 13:23 ` [PATCH v7 7/8] mpt3sas: Fix driver modifying persistent data in Manufacturing page11 Suganath Prabu
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Suganath Prabu @ 2018-10-31 13:23 UTC (permalink / raw)
  To: linux-scsi, linux-kernel; +Cc: Sathya.Prakash, sreekanth.reddy, Suganath Prabu

If EEDPTagMode field in manufacturing page11 is set then
unset it. This is needed to fix a hardware bug only
in SAS3/SAS2 cards. So, skipping EEDPTagMode changes
in Manufacturing page11 for SAS 3.5 controllers.

Signed-off-by: Suganath Prabu <suganath-prabu.subramani@broadcom.com>
---
 drivers/scsi/mpt3sas/mpt3sas_base.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index f25bc3c..9254b52 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -4060,7 +4060,7 @@ _base_static_config_pages(struct MPT3SAS_ADAPTER *ioc)
 	 * flag unset in NVDATA.
 	 */
 	mpt3sas_config_get_manufacturing_pg11(ioc, &mpi_reply, &ioc->manu_pg11);
-	if (ioc->manu_pg11.EEDPTagMode == 0) {
+	if (!ioc->is_gen35_ioc && ioc->manu_pg11.EEDPTagMode == 0) {
 		pr_err("%s: overriding NVDATA EEDPTagMode setting\n",
 		    ioc->name);
 		ioc->manu_pg11.EEDPTagMode &= ~0x3;
-- 
1.8.3.1


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

* [PATCH v7 7/8] mpt3sas: Fix driver modifying persistent data in Manufacturing page11
  2018-10-31 13:23 [PATCH v7 0/8] mpt3sas: some bug fixes patches Suganath Prabu
                   ` (5 preceding siblings ...)
  2018-10-31 13:23 ` [PATCH v7 6/8] mpt3sas: Don't modify EEDPTagMode field setting on SAS3.5 HBA devices Suganath Prabu
@ 2018-10-31 13:23 ` Suganath Prabu
  2018-10-31 13:23 ` [PATCH v7 8/8] mpt3sas: Bump driver version to 27.100.00.00 Suganath Prabu
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Suganath Prabu @ 2018-10-31 13:23 UTC (permalink / raw)
  To: linux-scsi, linux-kernel; +Cc: Sathya.Prakash, sreekanth.reddy, Suganath Prabu

Currently driver is modifying both current & NVRAM/persistent data
in Manufacturing page11. Driver should change only current copy of
Manufacturing page11. It should not modify the persistent data.

So removed the section of code where driver is modifying
the persistent data of Manufacturing page11.

Signed-off-by: Suganath Prabu <suganath-prabu.subramani@broadcom.com>
---
 drivers/scsi/mpt3sas/mpt3sas_config.c | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_config.c b/drivers/scsi/mpt3sas/mpt3sas_config.c
index 257b66f..8516713 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_config.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_config.c
@@ -658,10 +658,6 @@ mpt3sas_config_set_manufacturing_pg11(struct MPT3SAS_ADAPTER *ioc,
 	r = _config_request(ioc, &mpi_request, mpi_reply,
 	    MPT3_CONFIG_PAGE_DEFAULT_TIMEOUT, config_page,
 	    sizeof(*config_page));
-	mpi_request.Action = MPI2_CONFIG_ACTION_PAGE_WRITE_NVRAM;
-	r = _config_request(ioc, &mpi_request, mpi_reply,
-	    MPT3_CONFIG_PAGE_DEFAULT_TIMEOUT, config_page,
-	    sizeof(*config_page));
  out:
 	return r;
 }
-- 
1.8.3.1


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

* [PATCH v7 8/8] mpt3sas: Bump driver version to 27.100.00.00.
  2018-10-31 13:23 [PATCH v7 0/8] mpt3sas: some bug fixes patches Suganath Prabu
                   ` (6 preceding siblings ...)
  2018-10-31 13:23 ` [PATCH v7 7/8] mpt3sas: Fix driver modifying persistent data in Manufacturing page11 Suganath Prabu
@ 2018-10-31 13:23 ` Suganath Prabu
  2018-11-02 18:25 ` [PATCH v7 0/8] mpt3sas: some bug fixes patches Bjorn Helgaas
  2018-11-07  1:45 ` Martin K. Petersen
  9 siblings, 0 replies; 12+ messages in thread
From: Suganath Prabu @ 2018-10-31 13:23 UTC (permalink / raw)
  To: linux-scsi, linux-kernel; +Cc: Sathya.Prakash, sreekanth.reddy, Suganath Prabu

Modify driver version to 27.100.00.00
(which is equivalent to PH8 OOB driver)

Signed-off-by: Suganath Prabu <suganath-prabu.subramani@broadcom.com>
---
 drivers/scsi/mpt3sas/mpt3sas_base.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
index 4e532b0..6922c3b 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
@@ -74,8 +74,8 @@
 #define MPT3SAS_DRIVER_NAME		"mpt3sas"
 #define MPT3SAS_AUTHOR "Avago Technologies <MPT-FusionLinux.pdl@avagotech.com>"
 #define MPT3SAS_DESCRIPTION	"LSI MPT Fusion SAS 3.0 Device Driver"
-#define MPT3SAS_DRIVER_VERSION		"26.100.00.00"
-#define MPT3SAS_MAJOR_VERSION		26
+#define MPT3SAS_DRIVER_VERSION		"27.100.00.00"
+#define MPT3SAS_MAJOR_VERSION		27
 #define MPT3SAS_MINOR_VERSION		100
 #define MPT3SAS_BUILD_VERSION		0
 #define MPT3SAS_RELEASE_VERSION	00
-- 
1.8.3.1


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

* RE: [PATCH v7 0/8] mpt3sas: some bug fixes patches
  2018-10-31 13:23 [PATCH v7 0/8] mpt3sas: some bug fixes patches Suganath Prabu
                   ` (7 preceding siblings ...)
  2018-10-31 13:23 ` [PATCH v7 8/8] mpt3sas: Bump driver version to 27.100.00.00 Suganath Prabu
@ 2018-11-02 18:25 ` Bjorn Helgaas
  2018-11-02 18:35   ` Andy Shevchenko
  2018-11-07  1:45 ` Martin K. Petersen
  9 siblings, 1 reply; 12+ messages in thread
From: Bjorn Helgaas @ 2018-11-02 18:25 UTC (permalink / raw)
  To: Suganath Prabu, linux-scsi, linux-kernel
  Cc: Sathya.Prakash, sreekanth.reddy, Suganath Prabu, Andy Shevchenko

Suganath Prabu wrote:
> V7 Change Set:
> Split some patches into multiple small patches
> as suggested by Bjorn Helgaas
> 
> v6 Change Set:
> Incorporated changes as suggested by Andy.
> In Patch 1 converted while loop to do while in
> function mpt3sas_wait_for_ioc_to_operational().
> And in patch 3 removed parentheses.
> 
> V5 Change Set:
> V5 post has only defect fixes.
> We are reworking and incorporating the suggestions from Bjorn.
> And after covering tests, we ll be post Hot-Plug Surprise
>  removal patches.
> 
> V4 Change Set:
> Reframe split strings in print statement, to avoid
> 
> V3 Change Set:
> Simplified function "mpt3sas_base_pci_device_is_available" and
> made inline
> 
> V2 Change Set:
> Replaced mpt3sas_base_pci_device_is_unplugged with
> pci_device_is_present.
> 
> V1 Chnage Set:
> In Patch 0001 - unlock mutex, if active reset is in progress.
> 
> Suganath Prabu (8):
>   mpt3sas: Added new #define variable IOC_OPERATIONAL_WAIT_COUNT
>   mpt3sas: Separate out mpt3sas_wait_for_ioc
>   mpt3sas: Refactor mpt3sas_wait_for_ioc function
>   mpt3sas: Call sas_remove_host before removing the target devices
>   mpt3sas: Fix Sync cache command failure during driver unload
>   mpt3sas: Don't modify EEDPTagMode field setting on SAS3.5 HBA devices
>   mpt3sas: Fix driver modifying persistent data in Manufacturing page11
>   mpt3sas: Bump driver version to 27.100.00.00.
> 
>  drivers/scsi/mpt3sas/mpt3sas_base.c      | 73 +++++++++++++------------
>  drivers/scsi/mpt3sas/mpt3sas_base.h      |  8 ++-
>  drivers/scsi/mpt3sas/mpt3sas_config.c    | 27 ++--------
>  drivers/scsi/mpt3sas/mpt3sas_ctl.c       | 21 ++------
>  drivers/scsi/mpt3sas/mpt3sas_scsih.c     | 38 ++++++++++++-
>  drivers/scsi/mpt3sas/mpt3sas_transport.c | 91 ++++++--------------------------
>  6 files changed, 106 insertions(+), 152 deletions(-)
> 
> -- 
> 1.8.3.1

These all look fine to me.  I'm only looking at the code structure; I
have no idea how the mpt3sas hardware or the SCSI mid-layer work, so
you're on your own there :)

Reviewed-by: Bjorn Helgaas <bhelgaas@google.com>

Andy also gave his reviewed-by on the v6 series, so I cc'd him here.
I think it's good practice to specifically cc anybody who has
commented on previous versions of your patch set.

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

* Re: [PATCH v7 0/8] mpt3sas: some bug fixes patches
  2018-11-02 18:25 ` [PATCH v7 0/8] mpt3sas: some bug fixes patches Bjorn Helgaas
@ 2018-11-02 18:35   ` Andy Shevchenko
  0 siblings, 0 replies; 12+ messages in thread
From: Andy Shevchenko @ 2018-11-02 18:35 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Suganath Prabu Subramani, linux-scsi, Linux Kernel Mailing List,
	Sathya Prakash, Sreekanth Reddy

On Fri, Nov 2, 2018 at 8:26 PM Bjorn Helgaas <helgaas@kernel.org> wrote:
>
> Suganath Prabu wrote:
> > V7 Change Set:
> > Split some patches into multiple small patches
> > as suggested by Bjorn Helgaas
> >
> > v6 Change Set:
> > Incorporated changes as suggested by Andy.
> > In Patch 1 converted while loop to do while in
> > function mpt3sas_wait_for_ioc_to_operational().
> > And in patch 3 removed parentheses.
> >
> > V5 Change Set:
> > V5 post has only defect fixes.
> > We are reworking and incorporating the suggestions from Bjorn.
> > And after covering tests, we ll be post Hot-Plug Surprise
> >  removal patches.
> >
> > V4 Change Set:
> > Reframe split strings in print statement, to avoid
> >
> > V3 Change Set:
> > Simplified function "mpt3sas_base_pci_device_is_available" and
> > made inline
> >
> > V2 Change Set:
> > Replaced mpt3sas_base_pci_device_is_unplugged with
> > pci_device_is_present.
> >
> > V1 Chnage Set:
> > In Patch 0001 - unlock mutex, if active reset is in progress.
> >
> > Suganath Prabu (8):
> >   mpt3sas: Added new #define variable IOC_OPERATIONAL_WAIT_COUNT
> >   mpt3sas: Separate out mpt3sas_wait_for_ioc
> >   mpt3sas: Refactor mpt3sas_wait_for_ioc function
> >   mpt3sas: Call sas_remove_host before removing the target devices
> >   mpt3sas: Fix Sync cache command failure during driver unload
> >   mpt3sas: Don't modify EEDPTagMode field setting on SAS3.5 HBA devices
> >   mpt3sas: Fix driver modifying persistent data in Manufacturing page11
> >   mpt3sas: Bump driver version to 27.100.00.00.
> >
> >  drivers/scsi/mpt3sas/mpt3sas_base.c      | 73 +++++++++++++------------
> >  drivers/scsi/mpt3sas/mpt3sas_base.h      |  8 ++-
> >  drivers/scsi/mpt3sas/mpt3sas_config.c    | 27 ++--------
> >  drivers/scsi/mpt3sas/mpt3sas_ctl.c       | 21 ++------
> >  drivers/scsi/mpt3sas/mpt3sas_scsih.c     | 38 ++++++++++++-
> >  drivers/scsi/mpt3sas/mpt3sas_transport.c | 91 ++++++--------------------------
> >  6 files changed, 106 insertions(+), 152 deletions(-)
> >
> > --
> > 1.8.3.1
>
> These all look fine to me.  I'm only looking at the code structure; I
> have no idea how the mpt3sas hardware or the SCSI mid-layer work, so
> you're on your own there :)
>
> Reviewed-by: Bjorn Helgaas <bhelgaas@google.com>
>
> Andy also gave his reviewed-by on the v6 series, so I cc'd him here.
> I think it's good practice to specifically cc anybody who has
> commented on previous versions of your patch set.

Right, thanks!

With the same caveat as Bjorn posted I give my

Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>

to v7.


-- 
With Best Regards,
Andy Shevchenko

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

* Re: [PATCH v7 0/8] mpt3sas: some bug fixes patches
  2018-10-31 13:23 [PATCH v7 0/8] mpt3sas: some bug fixes patches Suganath Prabu
                   ` (8 preceding siblings ...)
  2018-11-02 18:25 ` [PATCH v7 0/8] mpt3sas: some bug fixes patches Bjorn Helgaas
@ 2018-11-07  1:45 ` Martin K. Petersen
  9 siblings, 0 replies; 12+ messages in thread
From: Martin K. Petersen @ 2018-11-07  1:45 UTC (permalink / raw)
  To: Suganath Prabu; +Cc: linux-scsi, linux-kernel, Sathya.Prakash, sreekanth.reddy


Suganath,

> Suganath Prabu (8):
>   mpt3sas: Added new #define variable IOC_OPERATIONAL_WAIT_COUNT
>   mpt3sas: Separate out mpt3sas_wait_for_ioc
>   mpt3sas: Refactor mpt3sas_wait_for_ioc function
>   mpt3sas: Call sas_remove_host before removing the target devices
>   mpt3sas: Fix Sync cache command failure during driver unload
>   mpt3sas: Don't modify EEDPTagMode field setting on SAS3.5 HBA devices
>   mpt3sas: Fix driver modifying persistent data in Manufacturing page11
>   mpt3sas: Bump driver version to 27.100.00.00.

Applied to 4.21/scsi-queue. Thank you!

-- 
Martin K. Petersen	Oracle Linux Engineering

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

end of thread, other threads:[~2018-11-07  1:46 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-31 13:23 [PATCH v7 0/8] mpt3sas: some bug fixes patches Suganath Prabu
2018-10-31 13:23 ` [PATCH v7 1/8] mpt3sas: Added new #define variable IOC_OPERATIONAL_WAIT_COUNT Suganath Prabu
2018-10-31 13:23 ` [PATCH v7 2/8] mpt3sas: Separate out mpt3sas_wait_for_ioc Suganath Prabu
2018-10-31 13:23 ` [PATCH v7 3/8] mpt3sas: Refactor mpt3sas_wait_for_ioc function Suganath Prabu
2018-10-31 13:23 ` [PATCH v7 4/8] mpt3sas: Call sas_remove_host before removing the target devices Suganath Prabu
2018-10-31 13:23 ` [PATCH v7 5/8] mpt3sas: Fix Sync cache command failure during driver unload Suganath Prabu
2018-10-31 13:23 ` [PATCH v7 6/8] mpt3sas: Don't modify EEDPTagMode field setting on SAS3.5 HBA devices Suganath Prabu
2018-10-31 13:23 ` [PATCH v7 7/8] mpt3sas: Fix driver modifying persistent data in Manufacturing page11 Suganath Prabu
2018-10-31 13:23 ` [PATCH v7 8/8] mpt3sas: Bump driver version to 27.100.00.00 Suganath Prabu
2018-11-02 18:25 ` [PATCH v7 0/8] mpt3sas: some bug fixes patches Bjorn Helgaas
2018-11-02 18:35   ` Andy Shevchenko
2018-11-07  1:45 ` 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).