All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/6] mpt3sas: driver update to Phase12.
@ 2016-05-06  8:59 Chaitra P B
  2016-05-06  8:59 ` [PATCH 1/6] mpt3sas: Update MPI header to 2.00.42 Chaitra P B
                   ` (6 more replies)
  0 siblings, 7 replies; 18+ messages in thread
From: Chaitra P B @ 2016-05-06  8:59 UTC (permalink / raw)
  To: jejb, hch
  Cc: martin.petersen, linux-scsi, JBottomley, Sathya.Prakash,
	suganath-prabu.subramani, linux-kernel, Chaitra P B

Here is the change list:
* Updated MPI version and MPI header files.
* Handle active cable exception event for Intruder/Cutlass HBAs.
* Use scsi_prot_ref_tag()API to fill reference tag field in the CDB.
* Updated mpt3sas driver version to Ph12 13.100.00.00
* Set maximum transfer length per IO on RAID volumes to 4MB.
* Use "synchronize_irq()"API to handle Asynchronous TM's completion.

Chaitra P B (6):
  mpt3sas: Update MPI header to 2.00.42
  mpt3sas: Handle active cable exception event
  mpt3sas: Fix initial Reference tag field for 4K PI drives.
  mpt3sas: Updating mpt3sas driver version to 13.100.00.00
  mpt3sas: Set maximum transfer length per IO to 4MB for VDs
  mpt3sas: Used "synchronize_irq()"API to synchronize timed-out IO
    & TMs

 drivers/scsi/mpt3sas/mpi/mpi2.h      |  7 +++++--
 drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h | 18 +++++++++++-----
 drivers/scsi/mpt3sas/mpi/mpi2_init.h | 15 +++++++++++---
 drivers/scsi/mpt3sas/mpi/mpi2_ioc.h  | 40 +++++++++++++++++++++++++++++++-----
 drivers/scsi/mpt3sas/mpt3sas_base.c  | 20 ++++++++++--------
 drivers/scsi/mpt3sas/mpt3sas_base.h  |  9 +++++---
 drivers/scsi/mpt3sas/mpt3sas_scsih.c | 27 ++++++++++++++++++++++--
 7 files changed, 108 insertions(+), 28 deletions(-)

-- 
1.8.3.1

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

* [PATCH 1/6] mpt3sas: Update MPI header to 2.00.42
  2016-05-06  8:59 [PATCH 0/6] mpt3sas: driver update to Phase12 Chaitra P B
@ 2016-05-06  8:59 ` Chaitra P B
  2016-05-11 13:59   ` Tomas Henzl
  2016-05-06  8:59 ` [PATCH 2/6] mpt3sas: Handle active cable exception event Chaitra P B
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 18+ messages in thread
From: Chaitra P B @ 2016-05-06  8:59 UTC (permalink / raw)
  To: jejb, hch
  Cc: martin.petersen, linux-scsi, JBottomley, Sathya.Prakash,
	suganath-prabu.subramani, linux-kernel, Chaitra P B

Updated MPI version and MPI header files.

ChangeList:
* Added SATADeviceWaitTime to SAS IO Unit Page 4
* Added EEDPObservedValue added to SCSI IO Reply message
* Added MPI2_EVENT_ACTIVE_CABLE_EXCEPTION and
  MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT

Signed-off-by: Chaitra P B <chaitra.basappa@broadcom.com>
---
 drivers/scsi/mpt3sas/mpi/mpi2.h      |  7 +++++--
 drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h | 18 +++++++++++-----
 drivers/scsi/mpt3sas/mpi/mpi2_init.h | 15 +++++++++++---
 drivers/scsi/mpt3sas/mpi/mpi2_ioc.h  | 40 +++++++++++++++++++++++++++++++-----
 4 files changed, 65 insertions(+), 15 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpi/mpi2.h b/drivers/scsi/mpt3sas/mpi/mpi2.h
index dfad5b8..a9a659f 100644
--- a/drivers/scsi/mpt3sas/mpi/mpi2.h
+++ b/drivers/scsi/mpt3sas/mpi/mpi2.h
@@ -8,7 +8,7 @@
  *                 scatter/gather formats.
  * Creation Date:  June 21, 2006
  *
- * mpi2.h Version:  02.00.39
+ * mpi2.h Version:  02.00.42
  *
  * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
  *       prefix are for use only on MPI v2.5 products, and must not be used
@@ -100,6 +100,9 @@
  *                     Added MPI2_DIAG_SBR_RELOAD.
  * 03-19-15  02.00.38  Bumped MPI2_HEADER_VERSION_UNIT.
  * 05-25-15  02.00.39  Bumped MPI2_HEADER_VERSION_UNIT.
+ * 08-25-15  02.00.40  Bumped MPI2_HEADER_VERSION_UNIT.
+ * 12-15-15  02.00.41  Bumped MPI_HEADER_VERSION_UNIT
+ * 01-01-16  02.00.42  Bumped MPI_HEADER_VERSION_UNIT
  * --------------------------------------------------------------------------
  */
 
@@ -139,7 +142,7 @@
 #define MPI2_VERSION_02_06		    (0x0206)
 
 /*Unit and Dev versioning for this MPI header set */
-#define MPI2_HEADER_VERSION_UNIT            (0x27)
+#define MPI2_HEADER_VERSION_UNIT            (0x2A)
 #define MPI2_HEADER_VERSION_DEV             (0x00)
 #define MPI2_HEADER_VERSION_UNIT_MASK       (0xFF00)
 #define MPI2_HEADER_VERSION_UNIT_SHIFT      (8)
diff --git a/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h b/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h
index 9cf09bf..95356a8 100644
--- a/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h
+++ b/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h
@@ -6,7 +6,7 @@
  *         Title:  MPI Configuration messages and pages
  * Creation Date:  November 10, 2006
  *
- *   mpi2_cnfg.h Version:  02.00.33
+ *   mpi2_cnfg.h Version:  02.00.35
  *
  * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
  *       prefix are for use only on MPI v2.5 products, and must not be used
@@ -183,9 +183,12 @@
  *                     Added MPI2_BIOSPAGE1_OPTIONS_ADVANCED_CONFIG.
  *                     Added AdapterOrderAux fields to BIOS Page 3.
  * 03-16-15  02.00.31  Updated for MPI v2.6.
+ *                     Added Flags field to IO Unit Page 7.
  *                     Added new SAS Phy Event codes
  * 05-25-15  02.00.33  Added more defines for the BiosOptions field of
  *                     MPI2_CONFIG_PAGE_BIOS_1.
+ * 08-25-15  02.00.34  Bumped Header Version.
+ * 12-18-15  02.00.35  Added SATADeviceWaitTime to SAS IO Unit Page 4.
  * --------------------------------------------------------------------------
  */
 
@@ -958,13 +961,16 @@ typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_7 {
 	U8                      Reserved3;              /*0x17 */
 	U32			BoardPowerRequirement;	/*0x18 */
 	U32			PCISlotPowerAllocation;	/*0x1C */
-	U32			Reserved6;		/* 0x20 */
-	U32			Reserved7;		/* 0x24 */
+/* reserved prior to MPI v2.6 */
+	U8		Flags;			/* 0x20 */
+	U8		Reserved6;			/* 0x21 */
+	U16		Reserved7;			/* 0x22 */
+	U32		Reserved8;			/* 0x24 */
 } MPI2_CONFIG_PAGE_IO_UNIT_7,
 	*PTR_MPI2_CONFIG_PAGE_IO_UNIT_7,
 	Mpi2IOUnitPage7_t, *pMpi2IOUnitPage7_t;
 
-#define MPI2_IOUNITPAGE7_PAGEVERSION			(0x04)
+#define MPI2_IOUNITPAGE7_PAGEVERSION			(0x05)
 
 /*defines for IO Unit Page 7 CurrentPowerMode and PreviousPowerMode fields */
 #define MPI25_IOUNITPAGE7_PM_INIT_MASK              (0xC0)
@@ -1045,6 +1051,8 @@ typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_7 {
 #define MPI2_IOUNITPAGE7_BOARD_TEMP_FAHRENHEIT      (0x01)
 #define MPI2_IOUNITPAGE7_BOARD_TEMP_CELSIUS         (0x02)
 
+/* defines for IO Unit Page 7 Flags field */
+#define MPI2_IOUNITPAGE7_FLAG_CABLE_POWER_EXC       (0x01)
 
 /*IO Unit Page 8 */
 
@@ -2271,7 +2279,7 @@ typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_4 {
 	U8
 		BootDeviceWaitTime;             /*0x24 */
 	U8
-		Reserved4;                      /*0x25 */
+		SATADeviceWaitTime;		/*0x25 */
 	U16
 		Reserved5;                      /*0x26 */
 	U8
diff --git a/drivers/scsi/mpt3sas/mpi/mpi2_init.h b/drivers/scsi/mpt3sas/mpi/mpi2_init.h
index c38f624..bba56b6 100644
--- a/drivers/scsi/mpt3sas/mpi/mpi2_init.h
+++ b/drivers/scsi/mpt3sas/mpi/mpi2_init.h
@@ -6,7 +6,7 @@
  *         Title:  MPI SCSI initiator mode messages and structures
  * Creation Date:  June 23, 2006
  *
- * mpi2_init.h Version:  02.00.17
+ * mpi2_init.h Version:  02.00.20
  *
  * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
  *       prefix are for use only on MPI v2.5 products, and must not be used
@@ -51,6 +51,9 @@
  *                     Added MPI26_SCSIIO_IOFLAGS_ESCAPE_PASSTHROUGH.
  *                     Added MPI2_SEP_REQ_SLOTSTATUS_DEV_OFF and
  *                     MPI2_SEP_REPLY_SLOTSTATUS_DEV_OFF.
+ * 08-26-15  02.00.18  Added SCSITASKMGMT_MSGFLAGS for Target Reset.
+ * 12-18-15  02.00.19  Added EEDPObservedValue added to SCSI IO Reply message.
+ * 01-04-16  02.00.20  Modified EEDP reported values in SCSI IO Reply message.
  * --------------------------------------------------------------------------
  */
 
@@ -359,8 +362,14 @@ typedef struct _MPI2_SCSI_IO_REPLY {
 	U16 TaskTag;		/*0x20 */
 	U16 SCSIStatusQualifier; /* 0x22 */
 	U32 BidirectionalTransferCount;	/*0x24 */
-	U32 EEDPErrorOffset;	/*0x28 *//*MPI 2.5 only; Reserved in MPI 2.0*/
-	U32 Reserved6;		/*0x2C */
+ /* MPI 2.5+ only; Reserved in MPI 2.0 */
+	U32 EEDPErrorOffset;	/* 0x28 */
+ /* MPI 2.5+ only; Reserved in MPI 2.0 */
+	U16 EEDPObservedAppTag;	/* 0x2C */
+ /* MPI 2.5+ only; Reserved in MPI 2.0 */
+	U16 EEDPObservedGuard;	/* 0x2E */
+ /* MPI 2.5+ only; Reserved in MPI 2.0 */
+	U32 EEDPObservedRefTag;	/* 0x30 */
 } MPI2_SCSI_IO_REPLY, *PTR_MPI2_SCSI_IO_REPLY,
 	Mpi2SCSIIOReply_t, *pMpi2SCSIIOReply_t;
 
diff --git a/drivers/scsi/mpt3sas/mpi/mpi2_ioc.h b/drivers/scsi/mpt3sas/mpi/mpi2_ioc.h
index cf510ed..8bae305 100644
--- a/drivers/scsi/mpt3sas/mpi/mpi2_ioc.h
+++ b/drivers/scsi/mpt3sas/mpi/mpi2_ioc.h
@@ -6,7 +6,7 @@
  *         Title:  MPI IOC, Port, Event, FW Download, and FW Upload messages
  * Creation Date:  October 11, 2006
  *
- * mpi2_ioc.h Version:  02.00.26
+ * mpi2_ioc.h Version:  02.00.27
  *
  * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
  *       prefix are for use only on MPI v2.5 products, and must not be used
@@ -134,9 +134,13 @@
  *			Added Encrypted Hash Extended Image.
  * 12-05-13  02.00.24  Added MPI25_HASH_IMAGE_TYPE_BIOS.
  * 11-18-14  02.00.25  Updated copyright information.
- * 03-16-15  02.00.26  Added MPI26_FW_HEADER_PID_FAMILY_3324_SAS and
+ * 03-16-15  02.00.26  Updated for MPI v2.6.
+ *		       Added MPI2_EVENT_ACTIVE_CABLE_EXCEPTION and
+ *		       MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT.
+ *                     Added MPI26_FW_HEADER_PID_FAMILY_3324_SAS and
  *                     MPI26_FW_HEADER_PID_FAMILY_3516_SAS.
  *                     Added MPI26_CTRL_OP_SHUTDOWN.
+ * 08-25-15  02.00.27  Added IC ARCH Class based signature defines
  * --------------------------------------------------------------------------
  */
 
@@ -168,7 +172,7 @@ typedef struct _MPI2_IOC_INIT_REQUEST {
 	U16 MsgVersion;		/*0x0C */
 	U16 HeaderVersion;	/*0x0E */
 	U32 Reserved5;		/*0x10 */
-	U16 Reserved6;		/*0x14 */
+	U16 ConfigurationFlags;	/* 0x14 */
 	U8 HostPageSize;	/*0x16 */
 	U8 HostMSIxVectors;	/*0x17 */
 	U16 Reserved8;		/*0x18 */
@@ -516,6 +520,7 @@ typedef struct _MPI2_EVENT_NOTIFICATION_REPLY {
 #define MPI2_EVENT_TEMP_THRESHOLD                   (0x0027)
 #define MPI2_EVENT_HOST_MESSAGE                     (0x0028)
 #define MPI2_EVENT_POWER_PERFORMANCE_CHANGE         (0x0029)
+#define MPI2_EVENT_ACTIVE_CABLE_EXCEPTION           (0x0034)
 #define MPI2_EVENT_MIN_PRODUCT_SPECIFIC             (0x006E)
 #define MPI2_EVENT_MAX_PRODUCT_SPECIFIC             (0x007F)
 
@@ -580,7 +585,7 @@ typedef struct _MPI2_EVENT_DATA_HOST_MESSAGE {
 } MPI2_EVENT_DATA_HOST_MESSAGE, *PTR_MPI2_EVENT_DATA_HOST_MESSAGE,
 	Mpi2EventDataHostMessage_t, *pMpi2EventDataHostMessage_t;
 
-/*Power Performance Change Event */
+/*Power Performance Change Event data */
 
 typedef struct _MPI2_EVENT_DATA_POWER_PERF_CHANGE {
 	U8 CurrentPowerMode;	/*0x00 */
@@ -605,6 +610,21 @@ typedef struct _MPI2_EVENT_DATA_POWER_PERF_CHANGE {
 #define MPI2_EVENT_PM_MODE_REDUCED_POWER     (0x05)
 #define MPI2_EVENT_PM_MODE_STANDBY           (0x06)
 
+/* Active Cable Exception Event data */
+
+typedef struct _MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT {
+	U32         ActiveCablePowerRequirement;        /* 0x00 */
+	U8          ReasonCode;                         /* 0x04 */
+	U8          ReceptacleID;                       /* 0x05 */
+	U16         Reserved1;                          /* 0x06 */
+} MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT,
+	*PTR_MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT,
+	Mpi26EventDataActiveCableExcept_t,
+	*pMpi26EventDataActiveCableExcept_t;
+
+/* defines for ReasonCode field */
+#define MPI26_EVENT_ACTIVE_CABLE_INSUFFICIENT_POWER     (0x00)
+
 /*Hard Reset Received Event data */
 
 typedef struct _MPI2_EVENT_DATA_HARD_RESET_RECEIVED {
@@ -1366,7 +1386,16 @@ typedef struct _MPI2_FW_IMAGE_HEADER {
 /*Signature0 field */
 #define MPI2_FW_HEADER_SIGNATURE0_OFFSET        (0x04)
 #define MPI2_FW_HEADER_SIGNATURE0               (0x5AFAA55A)
-#define MPI26_FW_HEADER_SIGNATURE0              (0x5AEAA55A)
+/* Last byte is defined by architecture */
+#define MPI26_FW_HEADER_SIGNATURE0_BASE         (0x5AEAA500)
+#define MPI26_FW_HEADER_SIGNATURE0_ARC_0        (0x5A)
+#define MPI26_FW_HEADER_SIGNATURE0_ARC_1        (0x00)
+#define MPI26_FW_HEADER_SIGNATURE0_ARC_2        (0x01)
+/* legacy (0x5AEAA55A) */
+#define MPI26_FW_HEADER_SIGNATURE0 \
+	(MPI26_FW_HEADER_SIGNATURE0_BASE+MPI26_FW_HEADER_SIGNATURE0_ARC_0)
+#define MPI26_FW_HEADER_SIGNATURE0_3516 \
+	(MPI26_FW_HEADER_SIGNATURE0_BASE+MPI26_FW_HEADER_SIGNATURE0_ARC_1)
 
 /*Signature1 field */
 #define MPI2_FW_HEADER_SIGNATURE1_OFFSET        (0x08)
@@ -1778,6 +1807,7 @@ typedef struct _MPI26_IOUNIT_CONTROL_REQUEST {
 #define MPI26_CTRL_OP_SAS_PHY_LINK_RESET                (0x06)
 #define MPI26_CTRL_OP_SAS_PHY_HARD_RESET                (0x07)
 #define MPI26_CTRL_OP_PHY_CLEAR_ERROR_LOG               (0x08)
+#define MPI26_CTRL_OP_LINK_CLEAR_ERROR_LOG              (0x09)
 #define MPI26_CTRL_OP_SAS_SEND_PRIMITIVE                (0x0A)
 #define MPI26_CTRL_OP_FORCE_FULL_DISCOVERY              (0x0B)
 #define MPI26_CTRL_OP_REMOVE_DEVICE                     (0x0D)
-- 
1.8.3.1

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

* [PATCH 2/6] mpt3sas: Handle active cable exception event
  2016-05-06  8:59 [PATCH 0/6] mpt3sas: driver update to Phase12 Chaitra P B
  2016-05-06  8:59 ` [PATCH 1/6] mpt3sas: Update MPI header to 2.00.42 Chaitra P B
@ 2016-05-06  8:59 ` Chaitra P B
  2016-05-11 14:00   ` Tomas Henzl
  2016-05-06  8:59 ` [PATCH 3/6] mpt3sas: Fix initial Reference tag field for 4K PI drives Chaitra P B
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 18+ messages in thread
From: Chaitra P B @ 2016-05-06  8:59 UTC (permalink / raw)
  To: jejb, hch
  Cc: martin.petersen, linux-scsi, JBottomley, Sathya.Prakash,
	suganath-prabu.subramani, linux-kernel, Chaitra P B

In-order to handle this 'MPI2_EVENT_ACTIVE_CABLE_EXCEPTION' event,
driver need to follow below steps,
1. Unmask the 'MPI2_EVENT_ACTIVE_CABLE_EXCEPTION' event,
so that FW can notify this event to host driver.
2. After receiving this event, add this event to AEN event queue,
for notifying this event to applications.
3. Then Print below message in kernel logs if the event data's reason
code is zero,
"Currently an active cable with ReceptacleID <ID_Value> cannot be powered
and devices connected to this active cable will not be seen. This active
cable requires <PowerValue_in_mW> of power"

This event is only for Intruder/Cutlass HBAs.

Signed-off-by: Chaitra P B <chaitra.basappa@broadcom.com>
---
 drivers/scsi/mpt3sas/mpt3sas_base.c  |  5 +++++
 drivers/scsi/mpt3sas/mpt3sas_scsih.c | 13 +++++++++++++
 2 files changed, 18 insertions(+)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index 8c44b9c..4e9142f 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -654,6 +654,9 @@ _base_display_event_data(struct MPT3SAS_ADAPTER *ioc,
 	case MPI2_EVENT_TEMP_THRESHOLD:
 		desc = "Temperature Threshold";
 		break;
+	case MPI2_EVENT_ACTIVE_CABLE_EXCEPTION:
+		desc = "Active cable exception";
+		break;
 	}
 
 	if (!desc)
@@ -5424,6 +5427,8 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc)
 	_base_unmask_events(ioc, MPI2_EVENT_IR_OPERATION_STATUS);
 	_base_unmask_events(ioc, MPI2_EVENT_LOG_ENTRY_ADDED);
 	_base_unmask_events(ioc, MPI2_EVENT_TEMP_THRESHOLD);
+	if (ioc->hba_mpi_version_belonged == MPI26_VERSION)
+		_base_unmask_events(ioc, MPI2_EVENT_ACTIVE_CABLE_EXCEPTION);
 
 	r = _base_make_ioc_operational(ioc, CAN_SLEEP);
 	if (r)
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index e0e4920..221f8bf 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -7850,6 +7850,7 @@ mpt3sas_scsih_event_callback(struct MPT3SAS_ADAPTER *ioc, u8 msix_index,
 	Mpi2EventNotificationReply_t *mpi_reply;
 	u16 event;
 	u16 sz;
+	Mpi26EventDataActiveCableExcept_t *ActiveCableEventData;
 
 	/* events turned off due to host reset or driver unloading */
 	if (ioc->remove_host || ioc->pci_error_recovery)
@@ -7962,6 +7963,18 @@ mpt3sas_scsih_event_callback(struct MPT3SAS_ADAPTER *ioc, u8 msix_index,
 			(Mpi2EventDataTemperature_t *)
 			mpi_reply->EventData);
 		break;
+	case MPI2_EVENT_ACTIVE_CABLE_EXCEPTION:
+		ActiveCableEventData =
+		    (Mpi26EventDataActiveCableExcept_t *) mpi_reply->EventData;
+		if (ActiveCableEventData->ReasonCode ==
+				MPI26_EVENT_ACTIVE_CABLE_INSUFFICIENT_POWER)
+			pr_info(MPT3SAS_FMT "Currently an active cable with ReceptacleID %d",
+			    ioc->name, ActiveCableEventData->ReceptacleID);
+			pr_info("cannot be powered and devices connected to this active cable");
+			pr_info("will not be seen. This active cable");
+			pr_info("requires %d mW of power",
+			    ActiveCableEventData->ActiveCablePowerRequirement);
+		break;
 
 	default: /* ignore the rest */
 		return 1;
-- 
1.8.3.1

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

* [PATCH 3/6] mpt3sas: Fix initial Reference tag field for 4K PI drives.
  2016-05-06  8:59 [PATCH 0/6] mpt3sas: driver update to Phase12 Chaitra P B
  2016-05-06  8:59 ` [PATCH 1/6] mpt3sas: Update MPI header to 2.00.42 Chaitra P B
  2016-05-06  8:59 ` [PATCH 2/6] mpt3sas: Handle active cable exception event Chaitra P B
@ 2016-05-06  8:59 ` Chaitra P B
  2016-05-11 14:02   ` Tomas Henzl
  2016-05-06  8:59 ` [PATCH 4/6] mpt3sas: Updating mpt3sas driver version to 13.100.00.00 Chaitra P B
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 18+ messages in thread
From: Chaitra P B @ 2016-05-06  8:59 UTC (permalink / raw)
  To: jejb, hch
  Cc: martin.petersen, linux-scsi, JBottomley, Sathya.Prakash,
	suganath-prabu.subramani, linux-kernel, Chaitra P B

Modified driver code to use scsi_prot_ref_tag() API instead of
scsi_get_lba(), while initializing reference tag field in the CDB.

Signed-off-by: Chaitra P B <chaitra.basappa@broadcom.com>
---
 drivers/scsi/mpt3sas/mpt3sas_scsih.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index 221f8bf..0fea937 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -3961,7 +3961,7 @@ _scsih_setup_eedp(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd,
 		    MPI2_SCSIIO_EEDPFLAGS_CHECK_REFTAG |
 		    MPI2_SCSIIO_EEDPFLAGS_CHECK_GUARD;
 		mpi_request->CDB.EEDP32.PrimaryReferenceTag =
-		    cpu_to_be32(scsi_get_lba(scmd));
+		    cpu_to_be32(scsi_prot_ref_tag(scmd));
 		break;
 
 	case SCSI_PROT_DIF_TYPE3:
-- 
1.8.3.1

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

* [PATCH 4/6] mpt3sas: Updating mpt3sas driver version to 13.100.00.00
  2016-05-06  8:59 [PATCH 0/6] mpt3sas: driver update to Phase12 Chaitra P B
                   ` (2 preceding siblings ...)
  2016-05-06  8:59 ` [PATCH 3/6] mpt3sas: Fix initial Reference tag field for 4K PI drives Chaitra P B
@ 2016-05-06  8:59 ` Chaitra P B
  2016-05-11 14:02   ` Tomas Henzl
  2016-05-06  8:59 ` [PATCH 5/6] mpt3sas: Set maximum transfer length per IO to 4MB for VDs Chaitra P B
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 18+ messages in thread
From: Chaitra P B @ 2016-05-06  8:59 UTC (permalink / raw)
  To: jejb, hch
  Cc: martin.petersen, linux-scsi, JBottomley, Sathya.Prakash,
	suganath-prabu.subramani, linux-kernel, Chaitra P B

Bump mpt3sas driver version from 12.100.00.00 to 13.100.00.00

Signed-off-by: Chaitra P B <chaitra.basappa@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 32580b5..aa918aa 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
@@ -73,8 +73,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		"12.100.00.00"
-#define MPT3SAS_MAJOR_VERSION		12
+#define MPT3SAS_DRIVER_VERSION		"13.100.00.00"
+#define MPT3SAS_MAJOR_VERSION		13
 #define MPT3SAS_MINOR_VERSION		100
 #define MPT3SAS_BUILD_VERSION		0
 #define MPT3SAS_RELEASE_VERSION	00
-- 
1.8.3.1

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

* [PATCH 5/6] mpt3sas: Set maximum transfer length per IO to 4MB for VDs
  2016-05-06  8:59 [PATCH 0/6] mpt3sas: driver update to Phase12 Chaitra P B
                   ` (3 preceding siblings ...)
  2016-05-06  8:59 ` [PATCH 4/6] mpt3sas: Updating mpt3sas driver version to 13.100.00.00 Chaitra P B
@ 2016-05-06  8:59 ` Chaitra P B
  2016-05-11 14:03   ` Tomas Henzl
  2016-05-06  8:59 ` [PATCH 6/6] mpt3sas: Used "synchronize_irq()"API to synchronize timed-out IO & TMs Chaitra P B
  2016-05-11 20:15 ` [PATCH 0/6] mpt3sas: driver update to Phase12 Martin K. Petersen
  6 siblings, 1 reply; 18+ messages in thread
From: Chaitra P B @ 2016-05-06  8:59 UTC (permalink / raw)
  To: jejb, hch
  Cc: martin.petersen, linux-scsi, JBottomley, Sathya.Prakash,
	suganath-prabu.subramani, linux-kernel, Chaitra P B

Set maximum transfer length per IO on RAID volumes
to 4MB by setting VD's queue's max_sector to 8192.

Signed-off-by: Chaitra P B <chaitra.basappa@broadcom.com>
---
 drivers/scsi/mpt3sas/mpt3sas_base.h  | 2 ++
 drivers/scsi/mpt3sas/mpt3sas_scsih.c | 8 ++++++++
 2 files changed, 10 insertions(+)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
index aa918aa..e1befba 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
@@ -112,6 +112,8 @@
 #define MPT3SAS_SAS_QUEUE_DEPTH		254
 #define MPT3SAS_RAID_QUEUE_DEPTH	128
 
+#define MPT3SAS_RAID_MAX_SECTORS	8192
+
 #define MPT_NAME_LENGTH			32	/* generic length of strings */
 #define MPT_STRING_LENGTH		64
 
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index 0fea937..abd8717 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -1911,6 +1911,14 @@ scsih_slave_configure(struct scsi_device *sdev)
 			    (unsigned long long)raid_device->wwid,
 			    raid_device->num_pds, ds);
 
+		if (shost->max_sectors > MPT3SAS_RAID_MAX_SECTORS) {
+			blk_queue_max_hw_sectors(sdev->request_queue,
+						MPT3SAS_RAID_MAX_SECTORS);
+			sdev_printk(KERN_INFO, sdev,
+					"Set queue's max_sector to: %u\n",
+						MPT3SAS_RAID_MAX_SECTORS);
+		}
+
 		scsih_change_queue_depth(sdev, qdepth);
 
 		/* raid transport support */
-- 
1.8.3.1

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

* [PATCH 6/6] mpt3sas: Used "synchronize_irq()"API to synchronize  timed-out IO & TMs
  2016-05-06  8:59 [PATCH 0/6] mpt3sas: driver update to Phase12 Chaitra P B
                   ` (4 preceding siblings ...)
  2016-05-06  8:59 ` [PATCH 5/6] mpt3sas: Set maximum transfer length per IO to 4MB for VDs Chaitra P B
@ 2016-05-06  8:59 ` Chaitra P B
  2016-05-10 13:11   ` Tomas Henzl
  2016-05-11 20:15 ` [PATCH 0/6] mpt3sas: driver update to Phase12 Martin K. Petersen
  6 siblings, 1 reply; 18+ messages in thread
From: Chaitra P B @ 2016-05-06  8:59 UTC (permalink / raw)
  To: jejb, hch
  Cc: martin.petersen, linux-scsi, JBottomley, Sathya.Prakash,
	suganath-prabu.subramani, linux-kernel, Chaitra P B

Replaced mpt3sas_base_flush_reply_queues()with
mpt3sas_base_sync_reply_irqs(),as mpt3sas_base_flush_reply_queues()
skips over reply queues that are currently busy (i.e. being handled
by interrupt processing in another core). If a reply queue is busy,
then call to synchronize_irq()in mpt3sas_base_sync_reply_irqs()make
sures the other core has finished flushing the queue and completed
any calls to the mid-layer scsi_done() routine.

Signed-off-by: Chaitra P B <chaitra.basappa@broadcom.com>
---
 drivers/scsi/mpt3sas/mpt3sas_base.c  | 15 +++++++--------
 drivers/scsi/mpt3sas/mpt3sas_base.h  |  3 ++-
 drivers/scsi/mpt3sas/mpt3sas_scsih.c |  4 +++-
 3 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index 4e9142f..fd9002d 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -1103,18 +1103,16 @@ _base_is_controller_msix_enabled(struct MPT3SAS_ADAPTER *ioc)
 }
 
 /**
- * mpt3sas_base_flush_reply_queues - flushing the MSIX reply queues
+ * mpt3sas_base_sync_reply_irqs - flush pending MSIX interrupts
  * @ioc: per adapter object
- * Context: ISR conext
+ * Context: non ISR conext
  *
- * Called when a Task Management request has completed. We want
- * to flush the other reply queues so all the outstanding IO has been
- * completed back to OS before we process the TM completetion.
+ * Called when a Task Management request has completed.
  *
  * Return nothing.
  */
 void
-mpt3sas_base_flush_reply_queues(struct MPT3SAS_ADAPTER *ioc)
+mpt3sas_base_sync_reply_irqs(struct MPT3SAS_ADAPTER *ioc)
 {
 	struct adapter_reply_queue *reply_q;
 
@@ -1125,12 +1123,13 @@ mpt3sas_base_flush_reply_queues(struct MPT3SAS_ADAPTER *ioc)
 		return;
 
 	list_for_each_entry(reply_q, &ioc->reply_queue_list, list) {
-		if (ioc->shost_recovery)
+		if (ioc->shost_recovery || ioc->remove_host ||
+				ioc->pci_error_recovery)
 			return;
 		/* TMs are on msix_index == 0 */
 		if (reply_q->msix_index == 0)
 			continue;
-		_base_interrupt(reply_q->vector, (void *)reply_q);
+		synchronize_irq(reply_q->vector);
 	}
 }
 
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
index e1befba..1a614d7 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
@@ -1236,7 +1236,8 @@ void *mpt3sas_base_get_msg_frame(struct MPT3SAS_ADAPTER *ioc, u16 smid);
 void *mpt3sas_base_get_sense_buffer(struct MPT3SAS_ADAPTER *ioc, u16 smid);
 __le32 mpt3sas_base_get_sense_buffer_dma(struct MPT3SAS_ADAPTER *ioc,
 	u16 smid);
-void mpt3sas_base_flush_reply_queues(struct MPT3SAS_ADAPTER *ioc);
+
+void mpt3sas_base_sync_reply_irqs(struct MPT3SAS_ADAPTER *ioc);
 
 /* hi-priority queue */
 u16 mpt3sas_base_get_smid_hpr(struct MPT3SAS_ADAPTER *ioc, u8 cb_idx);
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index abd8717..928214f 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -2126,7 +2126,6 @@ _scsih_tm_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply)
 		return 1;
 	if (ioc->tm_cmds.smid != smid)
 		return 1;
-	mpt3sas_base_flush_reply_queues(ioc);
 	ioc->tm_cmds.status |= MPT3_CMD_COMPLETE;
 	mpi_reply =  mpt3sas_base_get_reply_virt_addr(ioc, reply);
 	if (mpi_reply) {
@@ -2311,6 +2310,9 @@ mpt3sas_scsih_issue_tm(struct MPT3SAS_ADAPTER *ioc, u16 handle, uint channel,
 		}
 	}
 
+	/* sync IRQs in case those were busy during flush. */
+	mpt3sas_base_sync_reply_irqs(ioc);
+
 	if (ioc->tm_cmds.status & MPT3_CMD_REPLY_VALID) {
 		mpt3sas_trigger_master(ioc, MASTER_TRIGGER_TASK_MANAGMENT);
 		mpi_reply = ioc->tm_cmds.reply;
-- 
1.8.3.1

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

* Re: [PATCH 6/6] mpt3sas: Used "synchronize_irq()"API to synchronize timed-out IO & TMs
  2016-05-06  8:59 ` [PATCH 6/6] mpt3sas: Used "synchronize_irq()"API to synchronize timed-out IO & TMs Chaitra P B
@ 2016-05-10 13:11   ` Tomas Henzl
  2016-05-11  3:53       ` Sreekanth Reddy
  0 siblings, 1 reply; 18+ messages in thread
From: Tomas Henzl @ 2016-05-10 13:11 UTC (permalink / raw)
  To: Chaitra P B, jejb, hch
  Cc: martin.petersen, linux-scsi, JBottomley, Sathya.Prakash,
	suganath-prabu.subramani, linux-kernel

On 6.5.2016 10:59, Chaitra P B wrote:
> Replaced mpt3sas_base_flush_reply_queues()with
> mpt3sas_base_sync_reply_irqs(),as mpt3sas_base_flush_reply_queues()
> skips over reply queues that are currently busy (i.e. being handled
> by interrupt processing in another core). If a reply queue is busy,
> then call to synchronize_irq()in mpt3sas_base_sync_reply_irqs()make
> sures the other core has finished flushing the queue and completed
> any calls to the mid-layer scsi_done() routine.
>
> Signed-off-by: Chaitra P B <chaitra.basappa@broadcom.com>
> ---
>  drivers/scsi/mpt3sas/mpt3sas_base.c  | 15 +++++++--------
>  drivers/scsi/mpt3sas/mpt3sas_base.h  |  3 ++-
>  drivers/scsi/mpt3sas/mpt3sas_scsih.c |  4 +++-
>  3 files changed, 12 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
> index 4e9142f..fd9002d 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
> @@ -1103,18 +1103,16 @@ _base_is_controller_msix_enabled(struct MPT3SAS_ADAPTER *ioc)
>  }
>  
>  /**
> - * mpt3sas_base_flush_reply_queues - flushing the MSIX reply queues
> + * mpt3sas_base_sync_reply_irqs - flush pending MSIX interrupts
>   * @ioc: per adapter object
> - * Context: ISR conext
> + * Context: non ISR conext
>   *
> - * Called when a Task Management request has completed. We want
> - * to flush the other reply queues so all the outstanding IO has been
> - * completed back to OS before we process the TM completetion.
> + * Called when a Task Management request has completed.
>   *
>   * Return nothing.
>   */
>  void
> -mpt3sas_base_flush_reply_queues(struct MPT3SAS_ADAPTER *ioc)
> +mpt3sas_base_sync_reply_irqs(struct MPT3SAS_ADAPTER *ioc)
>  {
>  	struct adapter_reply_queue *reply_q;
>  
> @@ -1125,12 +1123,13 @@ mpt3sas_base_flush_reply_queues(struct MPT3SAS_ADAPTER *ioc)
>  		return;
>  
>  	list_for_each_entry(reply_q, &ioc->reply_queue_list, list) {
> -		if (ioc->shost_recovery)
> +		if (ioc->shost_recovery || ioc->remove_host ||
> +				ioc->pci_error_recovery)

Hi Chaitra,
how is this change + (ioc->remove_host || ioc->pci_error_recovery)
related to the subject? 

>  			return;
>  		/* TMs are on msix_index == 0 */
>  		if (reply_q->msix_index == 0)
>  			continue;
> -		_base_interrupt(reply_q->vector, (void *)reply_q);
> +		synchronize_irq(reply_q->vector);
>  	}

One thing I don't understand - what if an interrupt comes after
the synchronize_irq has finished ? 

Thanks,
Tomas 

>  }
>  
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
> index e1befba..1a614d7 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
> @@ -1236,7 +1236,8 @@ void *mpt3sas_base_get_msg_frame(struct MPT3SAS_ADAPTER *ioc, u16 smid);
>  void *mpt3sas_base_get_sense_buffer(struct MPT3SAS_ADAPTER *ioc, u16 smid);
>  __le32 mpt3sas_base_get_sense_buffer_dma(struct MPT3SAS_ADAPTER *ioc,
>  	u16 smid);
> -void mpt3sas_base_flush_reply_queues(struct MPT3SAS_ADAPTER *ioc);
> +
> +void mpt3sas_base_sync_reply_irqs(struct MPT3SAS_ADAPTER *ioc);
>  
>  /* hi-priority queue */
>  u16 mpt3sas_base_get_smid_hpr(struct MPT3SAS_ADAPTER *ioc, u8 cb_idx);
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
> index abd8717..928214f 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
> +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
> @@ -2126,7 +2126,6 @@ _scsih_tm_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply)
>  		return 1;
>  	if (ioc->tm_cmds.smid != smid)
>  		return 1;
> -	mpt3sas_base_flush_reply_queues(ioc);
>  	ioc->tm_cmds.status |= MPT3_CMD_COMPLETE;
>  	mpi_reply =  mpt3sas_base_get_reply_virt_addr(ioc, reply);
>  	if (mpi_reply) {
> @@ -2311,6 +2310,9 @@ mpt3sas_scsih_issue_tm(struct MPT3SAS_ADAPTER *ioc, u16 handle, uint channel,
>  		}
>  	}
>  
> +	/* sync IRQs in case those were busy during flush. */
> +	mpt3sas_base_sync_reply_irqs(ioc);
> +
>  	if (ioc->tm_cmds.status & MPT3_CMD_REPLY_VALID) {
>  		mpt3sas_trigger_master(ioc, MASTER_TRIGGER_TASK_MANAGMENT);
>  		mpi_reply = ioc->tm_cmds.reply;

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

* Re: [PATCH 6/6] mpt3sas: Used "synchronize_irq()"API to synchronize timed-out IO & TMs
  2016-05-10 13:11   ` Tomas Henzl
@ 2016-05-11  3:53       ` Sreekanth Reddy
  0 siblings, 0 replies; 18+ messages in thread
From: Sreekanth Reddy @ 2016-05-11  3:53 UTC (permalink / raw)
  To: Tomas Henzl
  Cc: Chaitra P B, jejb, Christoph Hellwig, Martin K. Petersen,
	linux-scsi, James E.J. Bottomley, Sathya Prakash Veerichetty,
	Suganath Prabu Subramani, linux-kernel

On Tue, May 10, 2016 at 6:41 PM, Tomas Henzl <thenzl@redhat.com> wrote:
> On 6.5.2016 10:59, Chaitra P B wrote:
>> Replaced mpt3sas_base_flush_reply_queues()with
>> mpt3sas_base_sync_reply_irqs(),as mpt3sas_base_flush_reply_queues()
>> skips over reply queues that are currently busy (i.e. being handled
>> by interrupt processing in another core). If a reply queue is busy,
>> then call to synchronize_irq()in mpt3sas_base_sync_reply_irqs()make
>> sures the other core has finished flushing the queue and completed
>> any calls to the mid-layer scsi_done() routine.
>>
>> Signed-off-by: Chaitra P B <chaitra.basappa@broadcom.com>
>> ---
>>  drivers/scsi/mpt3sas/mpt3sas_base.c  | 15 +++++++--------
>>  drivers/scsi/mpt3sas/mpt3sas_base.h  |  3 ++-
>>  drivers/scsi/mpt3sas/mpt3sas_scsih.c |  4 +++-
>>  3 files changed, 12 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
>> index 4e9142f..fd9002d 100644
>> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
>> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
>> @@ -1103,18 +1103,16 @@ _base_is_controller_msix_enabled(struct MPT3SAS_ADAPTER *ioc)
>>  }
>>
>>  /**
>> - * mpt3sas_base_flush_reply_queues - flushing the MSIX reply queues
>> + * mpt3sas_base_sync_reply_irqs - flush pending MSIX interrupts
>>   * @ioc: per adapter object
>> - * Context: ISR conext
>> + * Context: non ISR conext
>>   *
>> - * Called when a Task Management request has completed. We want
>> - * to flush the other reply queues so all the outstanding IO has been
>> - * completed back to OS before we process the TM completetion.
>> + * Called when a Task Management request has completed.
>>   *
>>   * Return nothing.
>>   */
>>  void
>> -mpt3sas_base_flush_reply_queues(struct MPT3SAS_ADAPTER *ioc)
>> +mpt3sas_base_sync_reply_irqs(struct MPT3SAS_ADAPTER *ioc)
>>  {
>>       struct adapter_reply_queue *reply_q;
>>
>> @@ -1125,12 +1123,13 @@ mpt3sas_base_flush_reply_queues(struct MPT3SAS_ADAPTER *ioc)
>>               return;
>>
>>       list_for_each_entry(reply_q, &ioc->reply_queue_list, list) {
>> -             if (ioc->shost_recovery)
>> +             if (ioc->shost_recovery || ioc->remove_host ||
>> +                             ioc->pci_error_recovery)
>
> Hi Chaitra,
> how is this change + (ioc->remove_host || ioc->pci_error_recovery)
> related to the subject?

[Sreekanth] These changes are actually not related to this subject, but these
sanity checks were missing previously.

>
>>                       return;
>>               /* TMs are on msix_index == 0 */
>>               if (reply_q->msix_index == 0)
>>                       continue;
>> -             _base_interrupt(reply_q->vector, (void *)reply_q);
>> +             synchronize_irq(reply_q->vector);
>>       }
>
> One thing I don't understand - what if an interrupt comes after
> the synchronize_irq has finished ?

[Sreekanth] Tomas, we are calling this function
'mpt3sas_base_flush_reply_queues()'
only after we got the reply for the TM. Also our firmware will send
reply for the TM only after
it sends reply for the all terminated IOs (due to this TM). So by this
time firmware has already
raised interrupts for all the terminated IOs before it raising
interrupt for TM. So we won't get
any interrupts (which we are interested) after synchronize_irq.

Thanks,
Sreekanth
>
> Thanks,
> Tomas
>
>>  }
>>
>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
>> index e1befba..1a614d7 100644
>> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
>> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
>> @@ -1236,7 +1236,8 @@ void *mpt3sas_base_get_msg_frame(struct MPT3SAS_ADAPTER *ioc, u16 smid);
>>  void *mpt3sas_base_get_sense_buffer(struct MPT3SAS_ADAPTER *ioc, u16 smid);
>>  __le32 mpt3sas_base_get_sense_buffer_dma(struct MPT3SAS_ADAPTER *ioc,
>>       u16 smid);
>> -void mpt3sas_base_flush_reply_queues(struct MPT3SAS_ADAPTER *ioc);
>> +
>> +void mpt3sas_base_sync_reply_irqs(struct MPT3SAS_ADAPTER *ioc);
>>
>>  /* hi-priority queue */
>>  u16 mpt3sas_base_get_smid_hpr(struct MPT3SAS_ADAPTER *ioc, u8 cb_idx);
>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
>> index abd8717..928214f 100644
>> --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
>> +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
>> @@ -2126,7 +2126,6 @@ _scsih_tm_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply)
>>               return 1;
>>       if (ioc->tm_cmds.smid != smid)
>>               return 1;
>> -     mpt3sas_base_flush_reply_queues(ioc);
>>       ioc->tm_cmds.status |= MPT3_CMD_COMPLETE;
>>       mpi_reply =  mpt3sas_base_get_reply_virt_addr(ioc, reply);
>>       if (mpi_reply) {
>> @@ -2311,6 +2310,9 @@ mpt3sas_scsih_issue_tm(struct MPT3SAS_ADAPTER *ioc, u16 handle, uint channel,
>>               }
>>       }
>>
>> +     /* sync IRQs in case those were busy during flush. */
>> +     mpt3sas_base_sync_reply_irqs(ioc);
>> +
>>       if (ioc->tm_cmds.status & MPT3_CMD_REPLY_VALID) {
>>               mpt3sas_trigger_master(ioc, MASTER_TRIGGER_TASK_MANAGMENT);
>>               mpi_reply = ioc->tm_cmds.reply;
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: [PATCH 6/6] mpt3sas: Used "synchronize_irq()"API to synchronize timed-out IO & TMs
@ 2016-05-11  3:53       ` Sreekanth Reddy
  0 siblings, 0 replies; 18+ messages in thread
From: Sreekanth Reddy @ 2016-05-11  3:53 UTC (permalink / raw)
  To: Tomas Henzl
  Cc: Chaitra P B, jejb, Christoph Hellwig, Martin K. Petersen,
	linux-scsi, James E.J. Bottomley, Sathya Prakash Veerichetty,
	Suganath Prabu Subramani, linux-kernel

On Tue, May 10, 2016 at 6:41 PM, Tomas Henzl <thenzl@redhat.com> wrote:
> On 6.5.2016 10:59, Chaitra P B wrote:
>> Replaced mpt3sas_base_flush_reply_queues()with
>> mpt3sas_base_sync_reply_irqs(),as mpt3sas_base_flush_reply_queues()
>> skips over reply queues that are currently busy (i.e. being handled
>> by interrupt processing in another core). If a reply queue is busy,
>> then call to synchronize_irq()in mpt3sas_base_sync_reply_irqs()make
>> sures the other core has finished flushing the queue and completed
>> any calls to the mid-layer scsi_done() routine.
>>
>> Signed-off-by: Chaitra P B <chaitra.basappa@broadcom.com>
>> ---
>>  drivers/scsi/mpt3sas/mpt3sas_base.c  | 15 +++++++--------
>>  drivers/scsi/mpt3sas/mpt3sas_base.h  |  3 ++-
>>  drivers/scsi/mpt3sas/mpt3sas_scsih.c |  4 +++-
>>  3 files changed, 12 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
>> index 4e9142f..fd9002d 100644
>> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
>> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
>> @@ -1103,18 +1103,16 @@ _base_is_controller_msix_enabled(struct MPT3SAS_ADAPTER *ioc)
>>  }
>>
>>  /**
>> - * mpt3sas_base_flush_reply_queues - flushing the MSIX reply queues
>> + * mpt3sas_base_sync_reply_irqs - flush pending MSIX interrupts
>>   * @ioc: per adapter object
>> - * Context: ISR conext
>> + * Context: non ISR conext
>>   *
>> - * Called when a Task Management request has completed. We want
>> - * to flush the other reply queues so all the outstanding IO has been
>> - * completed back to OS before we process the TM completetion.
>> + * Called when a Task Management request has completed.
>>   *
>>   * Return nothing.
>>   */
>>  void
>> -mpt3sas_base_flush_reply_queues(struct MPT3SAS_ADAPTER *ioc)
>> +mpt3sas_base_sync_reply_irqs(struct MPT3SAS_ADAPTER *ioc)
>>  {
>>       struct adapter_reply_queue *reply_q;
>>
>> @@ -1125,12 +1123,13 @@ mpt3sas_base_flush_reply_queues(struct MPT3SAS_ADAPTER *ioc)
>>               return;
>>
>>       list_for_each_entry(reply_q, &ioc->reply_queue_list, list) {
>> -             if (ioc->shost_recovery)
>> +             if (ioc->shost_recovery || ioc->remove_host ||
>> +                             ioc->pci_error_recovery)
>
> Hi Chaitra,
> how is this change + (ioc->remove_host || ioc->pci_error_recovery)
> related to the subject?

[Sreekanth] These changes are actually not related to this subject, but these
sanity checks were missing previously.

>
>>                       return;
>>               /* TMs are on msix_index == 0 */
>>               if (reply_q->msix_index == 0)
>>                       continue;
>> -             _base_interrupt(reply_q->vector, (void *)reply_q);
>> +             synchronize_irq(reply_q->vector);
>>       }
>
> One thing I don't understand - what if an interrupt comes after
> the synchronize_irq has finished ?

[Sreekanth] Tomas, we are calling this function
'mpt3sas_base_flush_reply_queues()'
only after we got the reply for the TM. Also our firmware will send
reply for the TM only after
it sends reply for the all terminated IOs (due to this TM). So by this
time firmware has already
raised interrupts for all the terminated IOs before it raising
interrupt for TM. So we won't get
any interrupts (which we are interested) after synchronize_irq.

Thanks,
Sreekanth
>
> Thanks,
> Tomas
>
>>  }
>>
>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
>> index e1befba..1a614d7 100644
>> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
>> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
>> @@ -1236,7 +1236,8 @@ void *mpt3sas_base_get_msg_frame(struct MPT3SAS_ADAPTER *ioc, u16 smid);
>>  void *mpt3sas_base_get_sense_buffer(struct MPT3SAS_ADAPTER *ioc, u16 smid);
>>  __le32 mpt3sas_base_get_sense_buffer_dma(struct MPT3SAS_ADAPTER *ioc,
>>       u16 smid);
>> -void mpt3sas_base_flush_reply_queues(struct MPT3SAS_ADAPTER *ioc);
>> +
>> +void mpt3sas_base_sync_reply_irqs(struct MPT3SAS_ADAPTER *ioc);
>>
>>  /* hi-priority queue */
>>  u16 mpt3sas_base_get_smid_hpr(struct MPT3SAS_ADAPTER *ioc, u8 cb_idx);
>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
>> index abd8717..928214f 100644
>> --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
>> +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
>> @@ -2126,7 +2126,6 @@ _scsih_tm_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply)
>>               return 1;
>>       if (ioc->tm_cmds.smid != smid)
>>               return 1;
>> -     mpt3sas_base_flush_reply_queues(ioc);
>>       ioc->tm_cmds.status |= MPT3_CMD_COMPLETE;
>>       mpi_reply =  mpt3sas_base_get_reply_virt_addr(ioc, reply);
>>       if (mpi_reply) {
>> @@ -2311,6 +2310,9 @@ mpt3sas_scsih_issue_tm(struct MPT3SAS_ADAPTER *ioc, u16 handle, uint channel,
>>               }
>>       }
>>
>> +     /* sync IRQs in case those were busy during flush. */
>> +     mpt3sas_base_sync_reply_irqs(ioc);
>> +
>>       if (ioc->tm_cmds.status & MPT3_CMD_REPLY_VALID) {
>>               mpt3sas_trigger_master(ioc, MASTER_TRIGGER_TASK_MANAGMENT);
>>               mpi_reply = ioc->tm_cmds.reply;
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: [PATCH 1/6] mpt3sas: Update MPI header to 2.00.42
  2016-05-06  8:59 ` [PATCH 1/6] mpt3sas: Update MPI header to 2.00.42 Chaitra P B
@ 2016-05-11 13:59   ` Tomas Henzl
  0 siblings, 0 replies; 18+ messages in thread
From: Tomas Henzl @ 2016-05-11 13:59 UTC (permalink / raw)
  To: Chaitra P B, jejb, hch
  Cc: martin.petersen, linux-scsi, JBottomley, Sathya.Prakash,
	suganath-prabu.subramani, linux-kernel

On 6.5.2016 10:59, Chaitra P B wrote:
> Updated MPI version and MPI header files.
>
> ChangeList:
> * Added SATADeviceWaitTime to SAS IO Unit Page 4
> * Added EEDPObservedValue added to SCSI IO Reply message
> * Added MPI2_EVENT_ACTIVE_CABLE_EXCEPTION and
>   MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT
>
> Signed-off-by: Chaitra P B <chaitra.basappa@broadcom.com>

Reviewed-by: Tomas Henzl <thenzl@redhat.com>

Tomas

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

* Re: [PATCH 2/6] mpt3sas: Handle active cable exception event
  2016-05-06  8:59 ` [PATCH 2/6] mpt3sas: Handle active cable exception event Chaitra P B
@ 2016-05-11 14:00   ` Tomas Henzl
  0 siblings, 0 replies; 18+ messages in thread
From: Tomas Henzl @ 2016-05-11 14:00 UTC (permalink / raw)
  To: Chaitra P B, jejb, hch
  Cc: martin.petersen, linux-scsi, JBottomley, Sathya.Prakash,
	suganath-prabu.subramani, linux-kernel

On 6.5.2016 10:59, Chaitra P B wrote:
> In-order to handle this 'MPI2_EVENT_ACTIVE_CABLE_EXCEPTION' event,
> driver need to follow below steps,
> 1. Unmask the 'MPI2_EVENT_ACTIVE_CABLE_EXCEPTION' event,
> so that FW can notify this event to host driver.
> 2. After receiving this event, add this event to AEN event queue,
> for notifying this event to applications.
> 3. Then Print below message in kernel logs if the event data's reason
> code is zero,
> "Currently an active cable with ReceptacleID <ID_Value> cannot be powered
> and devices connected to this active cable will not be seen. This active
> cable requires <PowerValue_in_mW> of power"
>
> This event is only for Intruder/Cutlass HBAs.
>
> Signed-off-by: Chaitra P B <chaitra.basappa@broadcom.com>

Reviewed-by: Tomas Henzl <thenzl@redhat.com>

Tomas

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

* Re: [PATCH 3/6] mpt3sas: Fix initial Reference tag field for 4K PI drives.
  2016-05-06  8:59 ` [PATCH 3/6] mpt3sas: Fix initial Reference tag field for 4K PI drives Chaitra P B
@ 2016-05-11 14:02   ` Tomas Henzl
  0 siblings, 0 replies; 18+ messages in thread
From: Tomas Henzl @ 2016-05-11 14:02 UTC (permalink / raw)
  To: Chaitra P B, jejb, hch
  Cc: martin.petersen, linux-scsi, JBottomley, Sathya.Prakash,
	suganath-prabu.subramani, linux-kernel

On 6.5.2016 10:59, Chaitra P B wrote:
> Modified driver code to use scsi_prot_ref_tag() API instead of
> scsi_get_lba(), while initializing reference tag field in the CDB.
>
> Signed-off-by: Chaitra P B <chaitra.basappa@broadcom.com>

Reviewed-by: Tomas Henzl <thenzl@redhat.com>

Tomas

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

* Re: [PATCH 4/6] mpt3sas: Updating mpt3sas driver version to 13.100.00.00
  2016-05-06  8:59 ` [PATCH 4/6] mpt3sas: Updating mpt3sas driver version to 13.100.00.00 Chaitra P B
@ 2016-05-11 14:02   ` Tomas Henzl
  0 siblings, 0 replies; 18+ messages in thread
From: Tomas Henzl @ 2016-05-11 14:02 UTC (permalink / raw)
  To: Chaitra P B, jejb, hch
  Cc: martin.petersen, linux-scsi, JBottomley, Sathya.Prakash,
	suganath-prabu.subramani, linux-kernel

On 6.5.2016 10:59, Chaitra P B wrote:
> Bump mpt3sas driver version from 12.100.00.00 to 13.100.00.00
>
> Signed-off-by: Chaitra P B <chaitra.basappa@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 32580b5..aa918aa 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.h
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
> @@ -73,8 +73,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		"12.100.00.00"
> -#define MPT3SAS_MAJOR_VERSION		12
> +#define MPT3SAS_DRIVER_VERSION		"13.100.00.00"
> +#define MPT3SAS_MAJOR_VERSION		13
>  #define MPT3SAS_MINOR_VERSION		100
>  #define MPT3SAS_BUILD_VERSION		0
>  #define MPT3SAS_RELEASE_VERSION	00

Reviewed-by: Tomas Henzl <thenzl@redhat.com>

Tomas

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

* Re: [PATCH 5/6] mpt3sas: Set maximum transfer length per IO to 4MB for VDs
  2016-05-06  8:59 ` [PATCH 5/6] mpt3sas: Set maximum transfer length per IO to 4MB for VDs Chaitra P B
@ 2016-05-11 14:03   ` Tomas Henzl
  0 siblings, 0 replies; 18+ messages in thread
From: Tomas Henzl @ 2016-05-11 14:03 UTC (permalink / raw)
  To: Chaitra P B, jejb, hch
  Cc: martin.petersen, linux-scsi, JBottomley, Sathya.Prakash,
	suganath-prabu.subramani, linux-kernel

On 6.5.2016 10:59, Chaitra P B wrote:
> Set maximum transfer length per IO on RAID volumes
> to 4MB by setting VD's queue's max_sector to 8192.
>
> Signed-off-by: Chaitra P B <chaitra.basappa@broadcom.com>

Reviewed-by: Tomas Henzl <thenzl@redhat.com>

Tomas

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

* Re: [PATCH 6/6] mpt3sas: Used "synchronize_irq()"API to synchronize timed-out IO & TMs
  2016-05-11  3:53       ` Sreekanth Reddy
@ 2016-05-11 14:04         ` Tomas Henzl
  -1 siblings, 0 replies; 18+ messages in thread
From: Tomas Henzl @ 2016-05-11 14:04 UTC (permalink / raw)
  To: Sreekanth Reddy
  Cc: Chaitra P B, jejb, Christoph Hellwig, Martin K. Petersen,
	linux-scsi, James E.J. Bottomley, Sathya Prakash Veerichetty,
	Suganath Prabu Subramani, linux-kernel

On 11.5.2016 05:53, Sreekanth Reddy wrote:
> On Tue, May 10, 2016 at 6:41 PM, Tomas Henzl <thenzl@redhat.com> wrote:
>> On 6.5.2016 10:59, Chaitra P B wrote:
>>> Replaced mpt3sas_base_flush_reply_queues()with
>>> mpt3sas_base_sync_reply_irqs(),as mpt3sas_base_flush_reply_queues()
>>> skips over reply queues that are currently busy (i.e. being handled
>>> by interrupt processing in another core). If a reply queue is busy,
>>> then call to synchronize_irq()in mpt3sas_base_sync_reply_irqs()make
>>> sures the other core has finished flushing the queue and completed
>>> any calls to the mid-layer scsi_done() routine.
>>>
>>> Signed-off-by: Chaitra P B <chaitra.basappa@broadcom.com>
>>> ---
>>>  drivers/scsi/mpt3sas/mpt3sas_base.c  | 15 +++++++--------
>>>  drivers/scsi/mpt3sas/mpt3sas_base.h  |  3 ++-
>>>  drivers/scsi/mpt3sas/mpt3sas_scsih.c |  4 +++-
>>>  3 files changed, 12 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
>>> index 4e9142f..fd9002d 100644
>>> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
>>> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
>>> @@ -1103,18 +1103,16 @@ _base_is_controller_msix_enabled(struct MPT3SAS_ADAPTER *ioc)
>>>  }
>>>
>>>  /**
>>> - * mpt3sas_base_flush_reply_queues - flushing the MSIX reply queues
>>> + * mpt3sas_base_sync_reply_irqs - flush pending MSIX interrupts
>>>   * @ioc: per adapter object
>>> - * Context: ISR conext
>>> + * Context: non ISR conext
>>>   *
>>> - * Called when a Task Management request has completed. We want
>>> - * to flush the other reply queues so all the outstanding IO has been
>>> - * completed back to OS before we process the TM completetion.
>>> + * Called when a Task Management request has completed.
>>>   *
>>>   * Return nothing.
>>>   */
>>>  void
>>> -mpt3sas_base_flush_reply_queues(struct MPT3SAS_ADAPTER *ioc)
>>> +mpt3sas_base_sync_reply_irqs(struct MPT3SAS_ADAPTER *ioc)
>>>  {
>>>       struct adapter_reply_queue *reply_q;
>>>
>>> @@ -1125,12 +1123,13 @@ mpt3sas_base_flush_reply_queues(struct MPT3SAS_ADAPTER *ioc)
>>>               return;
>>>
>>>       list_for_each_entry(reply_q, &ioc->reply_queue_list, list) {
>>> -             if (ioc->shost_recovery)
>>> +             if (ioc->shost_recovery || ioc->remove_host ||
>>> +                             ioc->pci_error_recovery)
>> Hi Chaitra,
>> how is this change + (ioc->remove_host || ioc->pci_error_recovery)
>> related to the subject?
> [Sreekanth] These changes are actually not related to this subject, but these
> sanity checks were missing previously.

Please next time put in a separated patch.

>
>>>                       return;
>>>               /* TMs are on msix_index == 0 */
>>>               if (reply_q->msix_index == 0)
>>>                       continue;
>>> -             _base_interrupt(reply_q->vector, (void *)reply_q);
>>> +             synchronize_irq(reply_q->vector);
>>>       }
>> One thing I don't understand - what if an interrupt comes after
>> the synchronize_irq has finished ?
> [Sreekanth] Tomas, we are calling this function
> 'mpt3sas_base_flush_reply_queues()'
> only after we got the reply for the TM. Also our firmware will send
> reply for the TM only after
> it sends reply for the all terminated IOs (due to this TM). So by this
> time firmware has already
> raised interrupts for all the terminated IOs before it raising
> interrupt for TM. So we won't get
> any interrupts (which we are interested) after synchronize_irq.

Thanks.

Reviewed-by: Tomas Henzl <thenzl@redhat.com>

Tomas

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

* Re: [PATCH 6/6] mpt3sas: Used "synchronize_irq()"API to synchronize timed-out IO & TMs
@ 2016-05-11 14:04         ` Tomas Henzl
  0 siblings, 0 replies; 18+ messages in thread
From: Tomas Henzl @ 2016-05-11 14:04 UTC (permalink / raw)
  To: Sreekanth Reddy
  Cc: Chaitra P B, jejb, Christoph Hellwig, Martin K. Petersen,
	linux-scsi, James E.J. Bottomley, Sathya Prakash Veerichetty,
	Suganath Prabu Subramani, linux-kernel

On 11.5.2016 05:53, Sreekanth Reddy wrote:
> On Tue, May 10, 2016 at 6:41 PM, Tomas Henzl <thenzl@redhat.com> wrote:
>> On 6.5.2016 10:59, Chaitra P B wrote:
>>> Replaced mpt3sas_base_flush_reply_queues()with
>>> mpt3sas_base_sync_reply_irqs(),as mpt3sas_base_flush_reply_queues()
>>> skips over reply queues that are currently busy (i.e. being handled
>>> by interrupt processing in another core). If a reply queue is busy,
>>> then call to synchronize_irq()in mpt3sas_base_sync_reply_irqs()make
>>> sures the other core has finished flushing the queue and completed
>>> any calls to the mid-layer scsi_done() routine.
>>>
>>> Signed-off-by: Chaitra P B <chaitra.basappa@broadcom.com>
>>> ---
>>>  drivers/scsi/mpt3sas/mpt3sas_base.c  | 15 +++++++--------
>>>  drivers/scsi/mpt3sas/mpt3sas_base.h  |  3 ++-
>>>  drivers/scsi/mpt3sas/mpt3sas_scsih.c |  4 +++-
>>>  3 files changed, 12 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
>>> index 4e9142f..fd9002d 100644
>>> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
>>> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
>>> @@ -1103,18 +1103,16 @@ _base_is_controller_msix_enabled(struct MPT3SAS_ADAPTER *ioc)
>>>  }
>>>
>>>  /**
>>> - * mpt3sas_base_flush_reply_queues - flushing the MSIX reply queues
>>> + * mpt3sas_base_sync_reply_irqs - flush pending MSIX interrupts
>>>   * @ioc: per adapter object
>>> - * Context: ISR conext
>>> + * Context: non ISR conext
>>>   *
>>> - * Called when a Task Management request has completed. We want
>>> - * to flush the other reply queues so all the outstanding IO has been
>>> - * completed back to OS before we process the TM completetion.
>>> + * Called when a Task Management request has completed.
>>>   *
>>>   * Return nothing.
>>>   */
>>>  void
>>> -mpt3sas_base_flush_reply_queues(struct MPT3SAS_ADAPTER *ioc)
>>> +mpt3sas_base_sync_reply_irqs(struct MPT3SAS_ADAPTER *ioc)
>>>  {
>>>       struct adapter_reply_queue *reply_q;
>>>
>>> @@ -1125,12 +1123,13 @@ mpt3sas_base_flush_reply_queues(struct MPT3SAS_ADAPTER *ioc)
>>>               return;
>>>
>>>       list_for_each_entry(reply_q, &ioc->reply_queue_list, list) {
>>> -             if (ioc->shost_recovery)
>>> +             if (ioc->shost_recovery || ioc->remove_host ||
>>> +                             ioc->pci_error_recovery)
>> Hi Chaitra,
>> how is this change + (ioc->remove_host || ioc->pci_error_recovery)
>> related to the subject?
> [Sreekanth] These changes are actually not related to this subject, but these
> sanity checks were missing previously.

Please next time put in a separated patch.

>
>>>                       return;
>>>               /* TMs are on msix_index == 0 */
>>>               if (reply_q->msix_index == 0)
>>>                       continue;
>>> -             _base_interrupt(reply_q->vector, (void *)reply_q);
>>> +             synchronize_irq(reply_q->vector);
>>>       }
>> One thing I don't understand - what if an interrupt comes after
>> the synchronize_irq has finished ?
> [Sreekanth] Tomas, we are calling this function
> 'mpt3sas_base_flush_reply_queues()'
> only after we got the reply for the TM. Also our firmware will send
> reply for the TM only after
> it sends reply for the all terminated IOs (due to this TM). So by this
> time firmware has already
> raised interrupts for all the terminated IOs before it raising
> interrupt for TM. So we won't get
> any interrupts (which we are interested) after synchronize_irq.

Thanks.

Reviewed-by: Tomas Henzl <thenzl@redhat.com>

Tomas


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

* Re: [PATCH 0/6] mpt3sas: driver update to Phase12.
  2016-05-06  8:59 [PATCH 0/6] mpt3sas: driver update to Phase12 Chaitra P B
                   ` (5 preceding siblings ...)
  2016-05-06  8:59 ` [PATCH 6/6] mpt3sas: Used "synchronize_irq()"API to synchronize timed-out IO & TMs Chaitra P B
@ 2016-05-11 20:15 ` Martin K. Petersen
  6 siblings, 0 replies; 18+ messages in thread
From: Martin K. Petersen @ 2016-05-11 20:15 UTC (permalink / raw)
  To: Chaitra P B
  Cc: jejb, hch, martin.petersen, linux-scsi, JBottomley,
	Sathya.Prakash, suganath-prabu.subramani, linux-kernel

>>>>> "Chaitra" == Chaitra P B <chaitra.basappa@broadcom.com> writes:

Chaitra> Here is the change list: * Updated MPI version and MPI header
Chaitra> files.  * Handle active cable exception event for
Chaitra> Intruder/Cutlass HBAs.  * Use scsi_prot_ref_tag()API to fill
Chaitra> reference tag field in the CDB.  * Updated mpt3sas driver
Chaitra> version to Ph12 13.100.00.00 * Set maximum transfer length per
Chaitra> IO on RAID volumes to 4MB.  * Use "synchronize_irq()"API to
Chaitra> handle Asynchronous TM's completion.

Applied to 4.7/scsi-queue.

-- 
Martin K. Petersen	Oracle Linux Engineering

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

end of thread, other threads:[~2016-05-11 20:16 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-05-06  8:59 [PATCH 0/6] mpt3sas: driver update to Phase12 Chaitra P B
2016-05-06  8:59 ` [PATCH 1/6] mpt3sas: Update MPI header to 2.00.42 Chaitra P B
2016-05-11 13:59   ` Tomas Henzl
2016-05-06  8:59 ` [PATCH 2/6] mpt3sas: Handle active cable exception event Chaitra P B
2016-05-11 14:00   ` Tomas Henzl
2016-05-06  8:59 ` [PATCH 3/6] mpt3sas: Fix initial Reference tag field for 4K PI drives Chaitra P B
2016-05-11 14:02   ` Tomas Henzl
2016-05-06  8:59 ` [PATCH 4/6] mpt3sas: Updating mpt3sas driver version to 13.100.00.00 Chaitra P B
2016-05-11 14:02   ` Tomas Henzl
2016-05-06  8:59 ` [PATCH 5/6] mpt3sas: Set maximum transfer length per IO to 4MB for VDs Chaitra P B
2016-05-11 14:03   ` Tomas Henzl
2016-05-06  8:59 ` [PATCH 6/6] mpt3sas: Used "synchronize_irq()"API to synchronize timed-out IO & TMs Chaitra P B
2016-05-10 13:11   ` Tomas Henzl
2016-05-11  3:53     ` Sreekanth Reddy
2016-05-11  3:53       ` Sreekanth Reddy
2016-05-11 14:04       ` Tomas Henzl
2016-05-11 14:04         ` Tomas Henzl
2016-05-11 20:15 ` [PATCH 0/6] mpt3sas: driver update to Phase12 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.