[mpt3sas driver 01/10] mpt3sas: Added support for high port count HBA variants.

2016-01-27 Thread Suganath prabu Subaramani
From: Suganath prabu Subramani 

Updated hardware description headers with MPI v2.6 and mpt3sas_pci_table[]
with vendor_ids,device_ids of Cutlass and Intruder HBA which has support
for 4 ports

Signed-off-by: Suganath prabu Subramani 
Signed-off-by: Chaitra P B 
---
 drivers/scsi/mpt3sas/mpi/mpi2.h  |  78 +++---
 drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h | 124 +++
 drivers/scsi/mpt3sas/mpi/mpi2_init.h |  21 --
 drivers/scsi/mpt3sas/mpi/mpi2_ioc.h  | 117 ++---
 drivers/scsi/mpt3sas/mpi/mpi2_raid.h |   5 +-
 drivers/scsi/mpt3sas/mpi/mpi2_sas.h  |  10 ++-
 drivers/scsi/mpt3sas/mpi/mpi2_tool.h |   5 +-
 drivers/scsi/mpt3sas/mpi/mpi2_type.h |   5 +-
 drivers/scsi/mpt3sas/mpt3sas_base.c  |   5 ++
 drivers/scsi/mpt3sas/mpt3sas_ctl.c   |  32 +++--
 drivers/scsi/mpt3sas/mpt3sas_scsih.c |  80 ++
 11 files changed, 423 insertions(+), 59 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpi/mpi2.h b/drivers/scsi/mpt3sas/mpi/mpi2.h
index ec27ad2..367e6ac 100644
--- a/drivers/scsi/mpt3sas/mpi/mpi2.h
+++ b/drivers/scsi/mpt3sas/mpi/mpi2.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2014 LSI Corporation.
+ * Copyright 2000-2015 Avago Technologies.  All rights reserved.
  *
  *
  *  Name:  mpi2.h
@@ -8,7 +8,7 @@
  * scatter/gather formats.
  * Creation Date:  June 21, 2006
  *
- * mpi2.h Version:  02.00.35
+ * mpi2.h Version:  02.00.37
  *
  * 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
@@ -92,6 +92,12 @@
  * 12-05-13  02.00.33  Bumped MPI2_HEADER_VERSION_UNIT.
  * 01-08-14  02.00.34  Bumped MPI2_HEADER_VERSION_UNIT
  * 06-13-14  02.00.35  Bumped MPI2_HEADER_VERSION_UNIT.
+ * 11-18-14  02.00.36  Updated copyright information.
+ * Bumped MPI2_HEADER_VERSION_UNIT.
+ * 03-xx-15  02.00.37  Bumped MPI2_HEADER_VERSION_UNIT.
+ * Added Scratchpad registers to
+ * MPI2_SYSTEM_INTERFACE_REGS.
+ * Added MPI2_DIAG_SBR_RELOAD.
  * --
  */
 
@@ -124,6 +130,12 @@
MPI25_VERSION_MINOR)
 #define MPI2_VERSION_02_05  (0x0205)
 
+/*minor version for MPI v2.6 compatible products */
+#define MPI26_VERSION_MINOR(0x06)
+#define MPI26_VERSION ((MPI2_VERSION_MAJOR << MPI2_VERSION_MAJOR_SHIFT) | \
+   MPI26_VERSION_MINOR)
+#define MPI2_VERSION_02_06 (0x0206)
+
 /*Unit and Dev versioning for this MPI header set */
 #define MPI2_HEADER_VERSION_UNIT(0x23)
 #define MPI2_HEADER_VERSION_DEV (0x00)
@@ -179,10 +191,12 @@ typedef volatile struct _MPI2_SYSTEM_INTERFACE_REGS {
U32 HCBSize;/*0x74 */
U32 HCBAddressLow;  /*0x78 */
U32 HCBAddressHigh; /*0x7C */
-   U32 Reserved6[16];  /*0x80 */
+   U32 Reserved6[12];  /*0x80 */
+   U32 Scratchpad[4];  /*0xB0 */
U32 RequestDescriptorPostLow;   /*0xC0 */
U32 RequestDescriptorPostHigh;  /*0xC4 */
-   U32 Reserved7[14];  /*0xC8 */
+   U32 AtomicRequestDescriptorPost;/*0xC8 */
+   U32 Reserved7[13];  /*0xCC */
 } MPI2_SYSTEM_INTERFACE_REGS,
*PTR_MPI2_SYSTEM_INTERFACE_REGS,
Mpi2SystemInterfaceRegs_t,
@@ -224,6 +238,8 @@ typedef volatile struct _MPI2_SYSTEM_INTERFACE_REGS {
  */
 #define MPI2_HOST_DIAGNOSTIC_OFFSET (0x0008)
 
+#define MPI2_DIAG_SBR_RELOAD(0x2000)
+
 #define MPI2_DIAG_BOOT_DEVICE_SELECT_MASK   (0x1800)
 #define MPI2_DIAG_BOOT_DEVICE_SELECT_DEFAULT(0x)
 #define MPI2_DIAG_BOOT_DEVICE_SELECT_HCDW   (0x0800)
@@ -298,10 +314,19 @@ typedef volatile struct _MPI2_SYSTEM_INTERFACE_REGS {
 #define MPI2_HCB_ADDRESS_HIGH_OFFSET(0x007C)
 
 /*
- *Offsets for the Request Queue
+ *Offsets for the Scratchpad registers
+ */
+#define MPI26_SCRATCHPAD0_OFFSET(0x00B0)
+#define MPI26_SCRATCHPAD1_OFFSET(0x00B4)
+#define MPI26_SCRATCHPAD2_OFFSET(0x00B8)
+#define MPI26_SCRATCHPAD3_OFFSET(0x00BC)
+
+/*
+ *Offsets for the Request Descriptor Post Queue
  */
 #define MPI2_REQUEST_DESCRIPTOR_POST_LOW_OFFSET (0x00C0)
 #define MPI2_REQUEST_DESCRIPTOR_POST_HIGH_OFFSET(0x00C4)
+#define MPI26_ATOMIC_REQUEST_DESCRIPTOR_POST_OFFSET (0x00C8)
 
 /*Hard Reset delay timings */
 #define MPI2_HARD_RESET_PCIE_FIRST_READ_DELAY_MICRO_SEC (5)
@@ -329,7 +354,8 @@ typedef struct _MPI2_DEFAULT_REQUEST_DESCRIPTOR {
*pMpi2DefaultRequestDescriptor_t;
 
 /*defines for the RequestFlags field */
-#define MPI2_REQ_DESCRIPT_FLAGS_TYPE_MASK   (0x0E)
+#define MPI2_REQ_DESCRIPT_FLAGS_TYPE_MASK   (0x1E)
+#define 

[mpt3sas driver 02/10] mpt3sas: Used IEEE SGL instead of MPI SGL while framing a SMP Passthrough request message.

2016-01-27 Thread Suganath prabu Subaramani
From: Suganath prabu Subramani 

As driver was using MPI SGL while framing the SMP Passthrough request
message due to which firmware unable to post the Reply Data in the host
memory and timeout is observed for this SMP Passthrough request message
and so unable to perform phy disable operation.

Signed-off-by: Suganath prabu Subramani 
Signed-off-by: Chaitra P B 
---
 drivers/scsi/mpt3sas/mpt3sas_transport.c | 23 ---
 1 file changed, 4 insertions(+), 19 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_transport.c 
b/drivers/scsi/mpt3sas/mpt3sas_transport.c
index ca36d7e..df08aeb 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_transport.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_transport.c
@@ -1418,7 +1418,6 @@ _transport_expander_phy_control(struct MPT3SAS_ADAPTER 
*ioc,
u32 ioc_state;
unsigned long timeleft;
void *psge;
-   u32 sgl_flags;
u8 issue_reset = 0;
void *data_out = NULL;
dma_addr_t data_out_dma;
@@ -1507,24 +1506,10 @@ _transport_expander_phy_control(struct MPT3SAS_ADAPTER 
*ioc,
cpu_to_le16(sizeof(struct phy_error_log_request));
psge = &mpi_request->SGL;
 
-   /* WRITE sgel first */
-   sgl_flags = (MPI2_SGE_FLAGS_SIMPLE_ELEMENT |
-   MPI2_SGE_FLAGS_END_OF_BUFFER | MPI2_SGE_FLAGS_HOST_TO_IOC);
-   sgl_flags = sgl_flags << MPI2_SGE_FLAGS_SHIFT;
-   ioc->base_add_sg_single(psge, sgl_flags |
-   sizeof(struct phy_control_request), data_out_dma);
-
-   /* incr sgel */
-   psge += ioc->sge_size;
-
-   /* READ sgel last */
-   sgl_flags = (MPI2_SGE_FLAGS_SIMPLE_ELEMENT |
-   MPI2_SGE_FLAGS_LAST_ELEMENT | MPI2_SGE_FLAGS_END_OF_BUFFER |
-   MPI2_SGE_FLAGS_END_OF_LIST);
-   sgl_flags = sgl_flags << MPI2_SGE_FLAGS_SHIFT;
-   ioc->base_add_sg_single(psge, sgl_flags |
-   sizeof(struct phy_control_reply), data_out_dma +
-   sizeof(struct phy_control_request));
+   ioc->build_sg(ioc, psge, data_out_dma,
+   sizeof(struct phy_control_request),
+   data_out_dma + sizeof(struct phy_control_request),
+   sizeof(struct phy_control_reply));
 
dtransportprintk(ioc, pr_info(MPT3SAS_FMT
"phy_control - send to sas_addr(0x%016llx), phy(%d), 
opcode(%d)\n",
-- 
1.8.3.1

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[mpt3sas driver 04/10] mpt3sas: Never block the Enclosure device

2016-01-27 Thread Suganath prabu Subaramani
From: Suganath prabu Subramani 

Never block the SEP device (i.e. Never invoke the
scsi_internal_device_block() API for SEP device) even for the delay not
responding events. Blocking the SEP device will create a deadlock while
adding any device to the OS.

Signed-off-by: Suganath prabu Subramani 
Signed-off-by: Chaitra P B 
---
 drivers/scsi/mpt3sas/mpt3sas_base.h  |  1 +
 drivers/scsi/mpt3sas/mpt3sas_scsih.c | 22 +-
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h 
b/drivers/scsi/mpt3sas/mpt3sas_base.h
index 5ad271e..2786222 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
@@ -398,6 +398,7 @@ struct MPT3SAS_DEVICE {
u8  configured_lun;
u8  block;
u8  tlr_snoop_check;
+   u8  ignore_delay_remove;
 };
 
 #define MPT3_CMD_NOT_USED  0x8000  /* free */
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c 
b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index 686a46a..dcb4c18 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -1953,7 +1953,15 @@ scsih_slave_configure(struct scsi_device *sdev)
if (sas_device->device_info & MPI2_SAS_DEVICE_INFO_SSP_TARGET) {
qdepth = MPT3SAS_SAS_QUEUE_DEPTH;
ssp_target = 1;
-   ds = "SSP";
+   if (sas_device->device_info &
+   MPI2_SAS_DEVICE_INFO_SEP) {
+   sdev_printk(KERN_WARNING, sdev,
+   "set ignore_delay_remove for handle(0x%04x)\n",
+   sas_device_priv_data->sas_target->handle);
+   sas_device_priv_data->ignore_delay_remove = 1;
+   ds = "SES";
+   } else
+   ds = "SSP";
} else {
qdepth = MPT3SAS_SATA_QUEUE_DEPTH;
if (sas_device->device_info & MPI2_SAS_DEVICE_INFO_STP_TARGET)
@@ -2943,6 +2951,12 @@ _scsih_block_io_all_device(struct MPT3SAS_ADAPTER *ioc)
continue;
if (sas_device_priv_data->block)
continue;
+   if (sas_device_priv_data->ignore_delay_remove) {
+   sdev_printk(KERN_INFO, sdev,
+   "%s skip device_block for SES handle(0x%04x)\n",
+   __func__, sas_device_priv_data->sas_target->handle);
+   continue;
+   }
_scsih_internal_device_block(sdev, sas_device_priv_data);
}
 }
@@ -2975,6 +2989,12 @@ _scsih_block_io_device(struct MPT3SAS_ADAPTER *ioc, u16 
handle)
continue;
if (sas_device->pend_sas_rphy_add)
continue;
+   if (sas_device_priv_data->ignore_delay_remove) {
+   sdev_printk(KERN_INFO, sdev,
+   "%s skip device_block for SES handle(0x%04x)\n",
+   __func__, sas_device_priv_data->sas_target->handle);
+   continue;
+   }
_scsih_internal_device_block(sdev, sas_device_priv_data);
}
 
-- 
1.8.3.1

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[mpt3sas driver 08/10] mpt3sas: Updated MPI Header to 2.00.42

2016-01-27 Thread Suganath prabu Subaramani
From: Suganath prabu Subramani 

Updated MPI version and MPI header files.

Signed-off-by: Suganath prabu Subramani 
Signed-off-by: Chaitra P B 
---
 drivers/scsi/mpt3sas/mpi/mpi2.h  | 8 +---
 drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h | 7 +--
 drivers/scsi/mpt3sas/mpi/mpi2_init.h | 3 ++-
 drivers/scsi/mpt3sas/mpi/mpi2_ioc.h  | 2 +-
 drivers/scsi/mpt3sas/mpi/mpi2_sas.h  | 2 +-
 5 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpi/mpi2.h b/drivers/scsi/mpt3sas/mpi/mpi2.h
index 367e6ac..dfad5b8 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.37
+ * mpi2.h Version:  02.00.39
  *
  * 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
@@ -94,10 +94,12 @@
  * 06-13-14  02.00.35  Bumped MPI2_HEADER_VERSION_UNIT.
  * 11-18-14  02.00.36  Updated copyright information.
  * Bumped MPI2_HEADER_VERSION_UNIT.
- * 03-xx-15  02.00.37  Bumped MPI2_HEADER_VERSION_UNIT.
+ * 03-16-15  02.00.37  Bumped MPI2_HEADER_VERSION_UNIT.
  * Added Scratchpad registers to
  * MPI2_SYSTEM_INTERFACE_REGS.
  * 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.
  * --
  */
 
@@ -137,7 +139,7 @@
 #define MPI2_VERSION_02_06 (0x0206)
 
 /*Unit and Dev versioning for this MPI header set */
-#define MPI2_HEADER_VERSION_UNIT(0x23)
+#define MPI2_HEADER_VERSION_UNIT(0x27)
 #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 43a6fe9..9cf09bf 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.31
+ *   mpi2_cnfg.h Version:  02.00.33
  *
  * 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
@@ -182,8 +182,10 @@
  * 11-18-14  02.00.30  Updated copyright information.
  * Added MPI2_BIOSPAGE1_OPTIONS_ADVANCED_CONFIG.
  * Added AdapterOrderAux fields to BIOS Page 3.
- * 03-xx-15  02.00.31  Updated for MPI v2.6.
+ * 03-16-15  02.00.31  Updated for MPI v2.6.
  * 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.
  * --
  */
 
@@ -1412,6 +1414,7 @@ typedef struct _MPI2_CONFIG_PAGE_BIOS_1 {
 #define MPI2_BIOSPAGE1_PAGEVERSION  (0x07)
 
 /*values for BIOS Page 1 BiosOptions field */
+#define MPI2_BIOSPAGE1_OPTIONS_BOOT_LIST_ADD_ALT_BOOT_DEVICE(0x8000)
 #define MPI2_BIOSPAGE1_OPTIONS_ADVANCED_CONFIG  (0x4000)
 
 #define MPI2_BIOSPAGE1_OPTIONS_PNS_MASK (0x3800)
diff --git a/drivers/scsi/mpt3sas/mpi/mpi2_init.h 
b/drivers/scsi/mpt3sas/mpi/mpi2_init.h
index 4916699..c38f624 100644
--- a/drivers/scsi/mpt3sas/mpi/mpi2_init.h
+++ b/drivers/scsi/mpt3sas/mpi/mpi2_init.h
@@ -47,7 +47,8 @@
  * 04-09-13  02.00.15  Added SCSIStatusQualifier field to MPI2_SCSI_IO_REPLY,
  * replacing the Reserved4 field.
  * 11-18-14  02.00.16  Updated copyright information.
- * 03-xx-15  02.00.17  Updated for MPI v2.6.
+ * 03-16-15  02.00.17  Updated for MPI v2.6.
+ * Added MPI26_SCSIIO_IOFLAGS_ESCAPE_PASSTHROUGH.
  * Added MPI2_SEP_REQ_SLOTSTATUS_DEV_OFF and
  * MPI2_SEP_REPLY_SLOTSTATUS_DEV_OFF.
  * --
diff --git a/drivers/scsi/mpt3sas/mpi/mpi2_ioc.h 
b/drivers/scsi/mpt3sas/mpi/mpi2_ioc.h
index 26e1ba4..cf510ed 100644
--- a/drivers/scsi/mpt3sas/mpi/mpi2_ioc.h
+++ b/drivers/scsi/mpt3sas/mpi/mpi2_ioc.h
@@ -134,7 +134,7 @@
  * 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-xx-15  02.00.26  Added MPI26_FW_HEADER_PID_FAMILY_3324_SAS and
+ * 03-16-15  02.00.26  Added MPI26_FW_HEADER_PID_FAMILY_3324_SAS and
  * MPI26_FW_HEADER_PID_FAMILY_3516_SAS.
  * Added MPI26_CTRL_OP_SHUTDOWN.
  * --

[mpt3sas driver 06/10] mpt3sas: Added smp_affinity_enable module parameter.

2016-01-27 Thread Suganath prabu Subaramani
From: Suganath prabu Subramani 

Module parameter to enable/disable configuring
affinity hint for msix vector.
SMP affinity feature can be enabled/disabled by setting
module parameter "smp_affinity_enable" to 1/0.
By default this feature is enabled. (smp_affinity_enable = 1 enabled).

Signed-off-by: Suganath prabu Subramani 
Signed-off-by: Chaitra P B 
---
 drivers/scsi/mpt3sas/mpt3sas_base.c | 34 +++---
 1 file changed, 23 insertions(+), 11 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c 
b/drivers/scsi/mpt3sas/mpt3sas_base.c
index 31838d9a..a1a3b39 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -83,6 +83,10 @@ static int msix_disable = -1;
 module_param(msix_disable, int, 0);
 MODULE_PARM_DESC(msix_disable, " disable msix routed interrupts (default=0)");
 
+static int smp_affinity_enable = 1;
+module_param(smp_affinity_enable, int, S_IRUGO);
+MODULE_PARM_DESC(smp_affinity_enable, "SMP affinity feature enable/disbale 
Default: enable(1)");
+
 static int max_msix_vectors = -1;
 module_param(max_msix_vectors, int, 0);
 MODULE_PARM_DESC(max_msix_vectors,
@@ -1812,8 +1816,10 @@ _base_free_irq(struct MPT3SAS_ADAPTER *ioc)
 
list_for_each_entry_safe(reply_q, next, &ioc->reply_queue_list, list) {
list_del(&reply_q->list);
-   irq_set_affinity_hint(reply_q->vector, NULL);
-   free_cpumask_var(reply_q->affinity_hint);
+   if (smp_affinity_enable) {
+   irq_set_affinity_hint(reply_q->vector, NULL);
+   free_cpumask_var(reply_q->affinity_hint);
+   }
synchronize_irq(reply_q->vector);
free_irq(reply_q->vector, reply_q);
kfree(reply_q);
@@ -1844,9 +1850,11 @@ _base_request_irq(struct MPT3SAS_ADAPTER *ioc, u8 index, 
u32 vector)
reply_q->msix_index = index;
reply_q->vector = vector;
 
-   if (!alloc_cpumask_var(&reply_q->affinity_hint, GFP_KERNEL))
-   return -ENOMEM;
-   cpumask_clear(reply_q->affinity_hint);
+   if (smp_affinity_enable) {
+   if (!alloc_cpumask_var(&reply_q->affinity_hint, GFP_KERNEL))
+   return -ENOMEM;
+   cpumask_clear(reply_q->affinity_hint);
+   }
 
atomic_set(&reply_q->busy, 0);
if (ioc->msix_enable)
@@ -1909,16 +1917,17 @@ _base_assign_reply_queues(struct MPT3SAS_ADAPTER *ioc)
 
for (i = 0 ; i < group ; i++) {
ioc->cpu_msix_table[cpu] = index;
-   cpumask_or(reply_q->affinity_hint,
+   if (smp_affinity_enable)
+   cpumask_or(reply_q->affinity_hint,
   reply_q->affinity_hint, get_cpu_mask(cpu));
cpu = cpumask_next(cpu, cpu_online_mask);
}
-
-   if (irq_set_affinity_hint(reply_q->vector,
+   if (smp_affinity_enable)
+   if (irq_set_affinity_hint(reply_q->vector,
   reply_q->affinity_hint))
-   dinitprintk(ioc, pr_info(MPT3SAS_FMT
-   "error setting affinity hint for irq vector %d\n",
-   ioc->name, reply_q->vector));
+   dinitprintk(ioc, pr_info(MPT3SAS_FMT
+"Err setting affinity hint to irq vector %d\n",
+ioc->name, reply_q->vector));
index++;
}
 }
@@ -1976,6 +1985,9 @@ _base_enable_msix(struct MPT3SAS_ADAPTER *ioc)
} else if (max_msix_vectors == 0)
goto try_ioapic;
 
+   if (ioc->msix_vector_count < ioc->cpu_count)
+   smp_affinity_enable = 0;
+
entries = kcalloc(ioc->reply_queue_count, sizeof(struct msix_entry),
GFP_KERNEL);
if (!entries) {
-- 
1.8.3.1

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[mpt3sas driver 07/10] mpt3sas: Add support for configurable Chain Frame Size

2016-01-27 Thread Suganath prabu Subaramani
From: Suganath prabu Subramani 

Added support for configurable Chain Frame Size. Calculate the
Chain Message Frame size from the IOCMaxChainSegementSize (iocfacts).
Applicable only for mpt3sas/SAS3.0 HBA's.

Signed-off-by: Suganath prabu Subramani 
Signed-off-by: Chaitra P B 
---
 drivers/scsi/mpt3sas/mpt3sas_base.c | 27 ++-
 drivers/scsi/mpt3sas/mpt3sas_base.h |  8 +++-
 2 files changed, 29 insertions(+), 6 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c 
b/drivers/scsi/mpt3sas/mpt3sas_base.c
index a1a3b39..0f623fb 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -3248,6 +3248,19 @@ _base_allocate_memory_pools(struct MPT3SAS_ADAPTER *ioc, 
 int sleep_flag)
/* reply frame size */
ioc->reply_sz = facts->ReplyFrameSize * 4;
 
+   /* chain segment size */
+   if (ioc->hba_mpi_version_belonged != MPI2_VERSION) {
+   if (facts->IOCMaxChainSegmentSize)
+   ioc->chain_segment_sz =
+   facts->IOCMaxChainSegmentSize *
+   MAX_CHAIN_ELEMT_SZ;
+   else
+   /* set to 128 bytes size if IOCMaxChainSegmentSize is zero */
+   ioc->chain_segment_sz = DEFAULT_NUM_FWCHAIN_ELEMTS *
+   MAX_CHAIN_ELEMT_SZ;
+   } else
+   ioc->chain_segment_sz = ioc->request_sz;
+
/* calculate the max scatter element size */
sge_size = max_t(u16, ioc->sge_size, ioc->sge_size_ieee);
 
@@ -3259,7 +3272,7 @@ _base_allocate_memory_pools(struct MPT3SAS_ADAPTER *ioc,  
int sleep_flag)
ioc->max_sges_in_main_message = max_sge_elements/sge_size;
 
/* now do the same for a chain buffer */
-   max_sge_elements = ioc->request_sz - sge_size;
+   max_sge_elements = ioc->chain_segment_sz - sge_size;
ioc->max_sges_in_chain_message = max_sge_elements/sge_size;
 
/*
@@ -3451,7 +3464,7 @@ _base_allocate_memory_pools(struct MPT3SAS_ADAPTER *ioc,  
int sleep_flag)
goto out;
}
ioc->chain_dma_pool = pci_pool_create("chain pool", ioc->pdev,
-   ioc->request_sz, 16, 0);
+   ioc->chain_segment_sz, 16, 0);
if (!ioc->chain_dma_pool) {
pr_err(MPT3SAS_FMT "chain_dma_pool: pci_pool_create failed\n",
ioc->name);
@@ -3465,13 +3478,13 @@ _base_allocate_memory_pools(struct MPT3SAS_ADAPTER 
*ioc,  int sleep_flag)
ioc->chain_depth = i;
goto chain_done;
}
-   total_sz += ioc->request_sz;
+   total_sz += ioc->chain_segment_sz;
}
  chain_done:
dinitprintk(ioc, pr_info(MPT3SAS_FMT
"chain pool depth(%d), frame_size(%d), pool_size(%d kB)\n",
-   ioc->name, ioc->chain_depth, ioc->request_sz,
-   ((ioc->chain_depth *  ioc->request_sz))/1024));
+   ioc->name, ioc->chain_depth, ioc->chain_segment_sz,
+   ((ioc->chain_depth *  ioc->chain_segment_sz))/1024));
 
/* initialize hi-priority queue smid's */
ioc->hpr_lookup = kcalloc(ioc->hi_priority_depth,
@@ -4332,6 +4345,10 @@ _base_get_ioc_facts(struct MPT3SAS_ADAPTER *ioc, int 
sleep_flag)
facts->FWVersion.Word = le32_to_cpu(mpi_reply.FWVersion.Word);
facts->IOCRequestFrameSize =
le16_to_cpu(mpi_reply.IOCRequestFrameSize);
+   if (ioc->hba_mpi_version_belonged != MPI2_VERSION) {
+   facts->IOCMaxChainSegmentSize =
+   le16_to_cpu(mpi_reply.IOCMaxChainSegmentSize);
+   }
facts->MaxInitiators = le16_to_cpu(mpi_reply.MaxInitiators);
facts->MaxTargets = le16_to_cpu(mpi_reply.MaxTargets);
ioc->shost->max_id = -1;
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h 
b/drivers/scsi/mpt3sas/mpt3sas_base.h
index 4b52a07..d1fee34 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
@@ -129,6 +129,9 @@
 
 #define MPT3SAS_INVALID_DEVICE_HANDLE  0x
 
+#define MAX_CHAIN_ELEMT_SZ 16
+#define DEFAULT_NUM_FWCHAIN_ELEMTS 8
+
 /*
  * reset phases
  */
@@ -759,7 +762,7 @@ struct mpt3sas_facts {
u32 IOCCapabilities;
union mpi3_version_unionFWVersion;
u16 IOCRequestFrameSize;
-   u16 Reserved3;
+   u16 IOCMaxChainSegmentSize;
u16 MaxInitiators;
u16 MaxTargets;
u16 MaxSasExpanders;
@@ -906,6 +909,8 @@ typedef void (*MPT3SAS_FLUSH_RUNNING_CMDS)(struct 
MPT3SAS_ADAPTER *ioc);
  * @max_sges_in_chain_message: number sg elements per chain
  * @chains_needed_per_io: max chains per io
  * @chain_depth: total chains allocated
+ * @chain_segment_sz: gives the max number of
+ *  

[mpt3sas driver 10/10] mpt3sas: Updating mpt3sas driver version to 12.100.00.00

2016-01-27 Thread Suganath prabu Subaramani
From: Suganath prabu Subramani 

Bump mpt3sas driver version from 09.102.00.00 to 12.100.00.00

Signed-off-by: Suganath prabu Subramani 
Signed-off-by: Chaitra P B 
---
 drivers/scsi/mpt3sas/mpt3sas_base.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h 
b/drivers/scsi/mpt3sas/mpt3sas_base.h
index 24bd19a..32580b5 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
@@ -73,9 +73,9 @@
 #define MPT3SAS_DRIVER_NAME"mpt3sas"
 #define MPT3SAS_AUTHOR "Avago Technologies "
 #define MPT3SAS_DESCRIPTION"LSI MPT Fusion SAS 3.0 Device Driver"
-#define MPT3SAS_DRIVER_VERSION "09.102.00.00"
-#define MPT3SAS_MAJOR_VERSION  9
-#define MPT3SAS_MINOR_VERSION  102
+#define MPT3SAS_DRIVER_VERSION "12.100.00.00"
+#define MPT3SAS_MAJOR_VERSION  12
+#define MPT3SAS_MINOR_VERSION  100
 #define MPT3SAS_BUILD_VERSION  0
 #define MPT3SAS_RELEASE_VERSION00
 
-- 
1.8.3.1

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[mpt3sas driver 09/10] mpt3sas: Fix for Asynchronous completion of timedout IO and task abort of timedout IO.

2016-01-27 Thread Suganath prabu Subaramani
From: Suganath prabu Subramani 

Track msix of each IO and use the same msix for issuing
abort to timed out IO. With this driver will process IO's
reply first followed by TM.

Signed-off-by: Suganath prabu Subramani 
Signed-off-by: Chaitra P B 
---
 drivers/scsi/mpt3sas/mpt3sas_base.c  | 20 +++-
 drivers/scsi/mpt3sas/mpt3sas_base.h  |  5 -
 drivers/scsi/mpt3sas/mpt3sas_ctl.c   |  2 +-
 drivers/scsi/mpt3sas/mpt3sas_scsih.c | 12 +---
 4 files changed, 25 insertions(+), 14 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c 
b/drivers/scsi/mpt3sas/mpt3sas_base.c
index 0f623fb..9307269 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -2258,6 +2258,12 @@ mpt3sas_base_get_reply_virt_addr(struct MPT3SAS_ADAPTER 
*ioc, u32 phys_addr)
return ioc->reply + (phys_addr - (u32)ioc->reply_dma);
 }
 
+static inline u8
+_base_get_msix_index(struct MPT3SAS_ADAPTER *ioc)
+{
+   return ioc->cpu_msix_table[raw_smp_processor_id()];
+}
+
 /**
  * mpt3sas_base_get_smid - obtain a free smid from internal queue
  * @ioc: per adapter object
@@ -2318,6 +2324,7 @@ mpt3sas_base_get_smid_scsiio(struct MPT3SAS_ADAPTER *ioc, 
u8 cb_idx,
request->scmd = scmd;
request->cb_idx = cb_idx;
smid = request->smid;
+   request->msix_io = _base_get_msix_index(ioc);
list_del(&request->tracker_list);
spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
return smid;
@@ -2440,12 +2447,6 @@ _base_writeq(__u64 b, volatile void __iomem *addr, 
spinlock_t *writeq_lock)
 }
 #endif
 
-static inline u8
-_base_get_msix_index(struct MPT3SAS_ADAPTER *ioc)
-{
-   return ioc->cpu_msix_table[raw_smp_processor_id()];
-}
-
 /**
  * mpt3sas_base_put_smid_scsi_io - send SCSI_IO request to firmware
  * @ioc: per adapter object
@@ -2499,18 +2500,19 @@ mpt3sas_base_put_smid_fast_path(struct MPT3SAS_ADAPTER 
*ioc, u16 smid,
  * mpt3sas_base_put_smid_hi_priority - send Task Managment request to firmware
  * @ioc: per adapter object
  * @smid: system request message index
- *
+ * @msix_task: msix_task will be same as msix of IO incase of task abort else 
0.
  * Return nothing.
  */
 void
-mpt3sas_base_put_smid_hi_priority(struct MPT3SAS_ADAPTER *ioc, u16 smid)
+mpt3sas_base_put_smid_hi_priority(struct MPT3SAS_ADAPTER *ioc, u16 smid,
+   u16 msix_task)
 {
Mpi2RequestDescriptorUnion_t descriptor;
u64 *request = (u64 *)&descriptor;
 
descriptor.HighPriority.RequestFlags =
MPI2_REQ_DESCRIPT_FLAGS_HIGH_PRIORITY;
-   descriptor.HighPriority.MSIxIndex =  0;
+   descriptor.HighPriority.MSIxIndex =  msix_task;
descriptor.HighPriority.SMID = cpu_to_le16(smid);
descriptor.HighPriority.LMID = 0;
descriptor.HighPriority.Reserved1 = 0;
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h 
b/drivers/scsi/mpt3sas/mpt3sas_base.h
index d1fee34..24bd19a 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
@@ -649,6 +649,7 @@ struct chain_tracker {
  * @cb_idx: callback index
  * @direct_io: To indicate whether I/O is direct (WARPDRIVE)
  * @tracker_list: list of free request (ioc->free_list)
+ * @msix_io: IO's msix
  */
 struct scsiio_tracker {
u16 smid;
@@ -657,6 +658,7 @@ struct scsiio_tracker {
u8  direct_io;
struct list_head chain_list;
struct list_head tracker_list;
+   u16 msix_io;
 };
 
 /**
@@ -1245,7 +1247,8 @@ void mpt3sas_base_put_smid_scsi_io(struct MPT3SAS_ADAPTER 
*ioc, u16 smid,
u16 handle);
 void mpt3sas_base_put_smid_fast_path(struct MPT3SAS_ADAPTER *ioc, u16 smid,
u16 handle);
-void mpt3sas_base_put_smid_hi_priority(struct MPT3SAS_ADAPTER *ioc, u16 smid);
+void mpt3sas_base_put_smid_hi_priority(struct MPT3SAS_ADAPTER *ioc,
+   u16 smid, u16 msix_task);
 void mpt3sas_base_put_smid_default(struct MPT3SAS_ADAPTER *ioc, u16 smid);
 void mpt3sas_base_initialize_callback_handler(void);
 u8 mpt3sas_base_register_callback_handler(MPT_CALLBACK cb_func);
diff --git a/drivers/scsi/mpt3sas/mpt3sas_ctl.c 
b/drivers/scsi/mpt3sas/mpt3sas_ctl.c
index d872587..7d00f09 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_ctl.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_ctl.c
@@ -832,7 +832,7 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct 
mpt3_ioctl_command karg,
tm_request->DevHandle));
ioc->build_sg_mpi(ioc, psge, data_out_dma, data_out_sz,
data_in_dma, data_in_sz);
-   mpt3sas_base_put_smid_hi_priority(ioc, smid);
+   mpt3sas_base_put_smid_hi_priority(ioc, smid, 0);
break;
}
case MPI2_FUNCTION_SMP_PASSTHROUGH:
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c 
b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index b12cada..e0e4920 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -2217,6 +2217,7 @@ mpt3sas_scsih_issue_tm(struct MPT

[mpt3sas driver 05/10] mpt3sas: Make use of additional HighPriority credit message frames for sending SCSI IO's

2016-01-27 Thread Suganath prabu Subaramani
From: Suganath prabu Subramani 

Driver assumes HighPriority credit as part of Global credit. But,
Firmware treats HighPriority credit value and global cedits as two
different values. Changed host queue algorithm to treat global credits and
highPriority credits as two different values.

Signed-off-by: Suganath prabu Subramani 
Signed-off-by: Chaitra P B 
---
 drivers/scsi/mpt3sas/mpt3sas_base.c  |  63 +++---
 drivers/scsi/mpt3sas/mpt3sas_base.h  |  27 ++
 drivers/scsi/mpt3sas/mpt3sas_scsih.c | 154 ++-
 3 files changed, 228 insertions(+), 16 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c 
b/drivers/scsi/mpt3sas/mpt3sas_base.c
index f59495b..31838d9a 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -775,7 +775,7 @@ mpt3sas_base_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 
msix_index,
 
mpi_reply = mpt3sas_base_get_reply_virt_addr(ioc, reply);
if (mpi_reply && mpi_reply->Function == MPI2_FUNCTION_EVENT_ACK)
-   return 1;
+   return mpt3sas_check_for_pending_internal_cmds(ioc, smid);
 
if (ioc->base_cmds.status == MPT3_CMD_NOT_USED)
return 1;
@@ -806,6 +806,7 @@ _base_async_event(struct MPT3SAS_ADAPTER *ioc, u8 
msix_index, u32 reply)
Mpi2EventNotificationReply_t *mpi_reply;
Mpi2EventAckRequest_t *ack_request;
u16 smid;
+   struct _event_ack_list *delayed_event_ack;
 
mpi_reply = mpt3sas_base_get_reply_virt_addr(ioc, reply);
if (!mpi_reply)
@@ -819,8 +820,18 @@ _base_async_event(struct MPT3SAS_ADAPTER *ioc, u8 
msix_index, u32 reply)
goto out;
smid = mpt3sas_base_get_smid(ioc, ioc->base_cb_idx);
if (!smid) {
-   pr_err(MPT3SAS_FMT "%s: failed obtaining a smid\n",
-   ioc->name, __func__);
+   delayed_event_ack = kzalloc(sizeof(*delayed_event_ack),
+   GFP_ATOMIC);
+   if (!delayed_event_ack)
+   goto out;
+   INIT_LIST_HEAD(&delayed_event_ack->list);
+   delayed_event_ack->Event = mpi_reply->Event;
+   delayed_event_ack->EventContext = mpi_reply->EventContext;
+   list_add_tail(&delayed_event_ack->list,
+   &ioc->delayed_event_ack_list);
+   dewtprintk(ioc, pr_info(MPT3SAS_FMT
+   "DELAYED: EVENT ACK: event (0x%04x)\n",
+   ioc->name, le16_to_cpu(mpi_reply->Event)));
goto out;
}
 
@@ -3189,20 +3200,35 @@ _base_allocate_memory_pools(struct MPT3SAS_ADAPTER 
*ioc,  int sleep_flag)
}
ioc->shost->sg_tablesize = sg_tablesize;
 
-   ioc->hi_priority_depth = facts->HighPriorityCredit;
-   ioc->internal_depth = ioc->hi_priority_depth + (5);
+   ioc->internal_depth = min_t(int, (facts->HighPriorityCredit + (5)),
+   (facts->RequestCredit / 4));
+   if (ioc->internal_depth < INTERNAL_CMDS_COUNT) {
+   if (facts->RequestCredit <= (INTERNAL_CMDS_COUNT +
+   INTERNAL_SCSIIO_CMDS_COUNT)) {
+   pr_err(MPT3SAS_FMT "IOC doesn't have enough Request \
+   Credits, it has just %d number of credits\n",
+   ioc->name, facts->RequestCredit);
+   return -ENOMEM;
+   }
+   ioc->internal_depth = 10;
+   }
+
+   ioc->hi_priority_depth = ioc->internal_depth - (5);
/* command line tunables  for max controller queue depth */
if (max_queue_depth != -1 && max_queue_depth != 0) {
max_request_credit = min_t(u16, max_queue_depth +
-   ioc->hi_priority_depth + ioc->internal_depth,
-   facts->RequestCredit);
+   ioc->internal_depth, facts->RequestCredit);
if (max_request_credit > MAX_HBA_QUEUE_DEPTH)
max_request_credit =  MAX_HBA_QUEUE_DEPTH;
} else
max_request_credit = min_t(u16, facts->RequestCredit,
MAX_HBA_QUEUE_DEPTH);
 
-   ioc->hba_queue_depth = max_request_credit;
+   /* Firmware maintains additional facts->HighPriorityCredit number of
+* credits for HiPriprity Request messages, so hba queue depth will be
+* sum of max_request_credit and high priority queue depth.
+*/
+   ioc->hba_queue_depth = max_request_credit + ioc->hi_priority_depth;
 
/* request frame size */
ioc->request_sz = facts->IOCRequestFrameSize * 4;
@@ -3249,7 +3275,6 @@ _base_allocate_memory_pools(struct MPT3SAS_ADAPTER *ioc,  
int sleep_flag)
ioc->reply_post_queue_depth += 16 -
(ioc->reply_post_queue_depth % 16);
 
-
if (ioc->reply_post_queue_depth >
facts->MaxReplyDescriptorPostQueueDepth) {

[mpt3sas driver 03/10] mpt3sas: Fix static analyzer(coverity) tool identified defects

2016-01-27 Thread Suganath prabu Subaramani
From: Suganath prabu Subramani 

1.Wrong size of argument is being passed
 The size of struct being passed as an argument to memset func and area of
 memory being pointed by an instance of struct in memset func should be of
 same structure type.
2.Dereference null return value
3.Array compared against '0'
 Check whether value pointed by particular index of an array is null or not
 in "if" statement.

Signed-off-by: Suganath prabu Subramani 
Signed-off-by: Chaitra P B 
---
 drivers/scsi/mpt3sas/mpt3sas_ctl.c   | 3 ++-
 drivers/scsi/mpt3sas/mpt3sas_scsih.c | 4 ++--
 drivers/scsi/mpt3sas/mpt3sas_transport.c | 2 +-
 3 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_ctl.c 
b/drivers/scsi/mpt3sas/mpt3sas_ctl.c
index ef9971e..d872587 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_ctl.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_ctl.c
@@ -401,7 +401,8 @@ mpt3sas_ctl_event_callback(struct MPT3SAS_ADAPTER *ioc, u8 
msix_index,
Mpi2EventNotificationReply_t *mpi_reply;
 
mpi_reply = mpt3sas_base_get_reply_virt_addr(ioc, reply);
-   mpt3sas_ctl_add_to_event_log(ioc, mpi_reply);
+   if (mpi_reply)
+   mpt3sas_ctl_add_to_event_log(ioc, mpi_reply);
return 1;
 }
 
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c 
b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index 0fb4ccd..686a46a 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -2399,7 +2399,7 @@ _scsih_tm_display_info(struct MPT3SAS_ADAPTER *ioc, 
struct scsi_cmnd *scmd)
 (unsigned long long)
 sas_device->enclosure_logical_id,
 sas_device->slot);
-   if (sas_device->connector_name)
+   if (sas_device->connector_name[0] != '\0')
starget_printk(KERN_INFO, starget,
"enclosure level(0x%04x),connector name(%s)\n",
 sas_device->enclosure_level,
@@ -3134,7 +3134,7 @@ _scsih_tm_tr_send(struct MPT3SAS_ADAPTER *ioc, u16 handle)
 " slot(%d)\n", ioc->name, (unsigned long long)
  sas_device->enclosure_logical_id,
  sas_device->slot));
-   if (sas_device->connector_name)
+   if (sas_device->connector_name[0] != '\0')
dewtprintk(ioc, pr_info(MPT3SAS_FMT
 "setting delete flag: enclosure level(0x%04x),"
 " connector name( %s)\n", ioc->name,
diff --git a/drivers/scsi/mpt3sas/mpt3sas_transport.c 
b/drivers/scsi/mpt3sas/mpt3sas_transport.c
index df08aeb..6a84b82 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_transport.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_transport.c
@@ -1600,7 +1600,7 @@ _transport_phy_reset(struct sas_phy *phy, int hard_reset)
SMP_PHY_CONTROL_LINK_RESET);
 
/* handle hba phys */
-   memset(&mpi_request, 0, sizeof(Mpi2SasIoUnitControlReply_t));
+   memset(&mpi_request, 0, sizeof(Mpi2SasIoUnitControlRequest_t));
mpi_request.Function = MPI2_FUNCTION_SAS_IO_UNIT_CONTROL;
mpi_request.Operation = hard_reset ?
MPI2_SAS_OP_PHY_HARD_RESET : MPI2_SAS_OP_PHY_LINK_RESET;
-- 
1.8.3.1

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[mpt3sas driver patches 00/10] mpt3sas driver enhancements and

2016-01-27 Thread Suganath prabu Subaramani
From: Suganath prabu Subramani 

Here is the change list:
Posting 10 patches for mpt3sas driver enhancements and few fixes.
  * Updated hardware description headers with MPI v2.6 and
mpt3sas_pci_table[] with vendor_ids,device_ids of Cutlass and
Intruder HBA which has support for 4 ports.
  * Static analyzer(coverity) tool identified defects.
  * Never block the SEP device even for the delay not
responding events. Blocking the SEP device will create a deadlock while
adding any device to the OS.
  * Modified host queue algorithm to treat global credits and
highPriority credits as two different values.
  * Module parameter to enable/disable configuring
affinity hint for msix vector.
  * Added support for configurable Chain Frame Size for
SAS 3.0 HBA'S.
  * Updated MPI version and MPI header files.
  * Fix for Asynchronous completion of timedout IO and task abort
of timedout IO.
  * Updated driver version to 12.100.00.00

Suganath prabu Subramani (10):
  mpt3sas: Added support for high port count HBA variants.
  mpt3sas: Used IEEE SGL instead of MPI SGL while framing a SMP
Passthrough request message.
  mpt3sas: Fix static analyzer(coverity) tool identified defects
  mpt3sas: Never block the Enclosure device
  mpt3sas: Make use of additional HighPriority credit message frames for
sending SCSI IO's
  mpt3sas: Added smp_affinity_enable module parameter.
  mpt3sas: Add support for configurable Chain Frame Size
  mpt3sas: Updated MPI Header to 2.00.42
  mpt3sas: Fix for Asynchronous completion of timedout IO and task abort
of timedout IO.
  mpt3sas: Updating mpt3sas driver version to 12.100.00.00

 drivers/scsi/mpt3sas/mpi/mpi2.h  |  82 +-
 drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h | 127 +--
 drivers/scsi/mpt3sas/mpi/mpi2_init.h |  22 ++-
 drivers/scsi/mpt3sas/mpi/mpi2_ioc.h  | 117 -
 drivers/scsi/mpt3sas/mpi/mpi2_raid.h |   5 +-
 drivers/scsi/mpt3sas/mpi/mpi2_sas.h  |  10 +-
 drivers/scsi/mpt3sas/mpi/mpi2_tool.h |   5 +-
 drivers/scsi/mpt3sas/mpi/mpi2_type.h |   5 +-
 drivers/scsi/mpt3sas/mpt3sas_base.c  | 149 -
 drivers/scsi/mpt3sas/mpt3sas_base.h  |  47 +-
 drivers/scsi/mpt3sas/mpt3sas_ctl.c   |  37 -
 drivers/scsi/mpt3sas/mpt3sas_scsih.c | 272 ---
 drivers/scsi/mpt3sas/mpt3sas_transport.c |  25 +--
 13 files changed, 769 insertions(+), 134 deletions(-)

Thanks,
Suganath prabu S
-- 
1.8.3.1

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html