scsi: megaraid_sas: RAID1 PCI bandwidth limit algorithm is applicable for only Ventura
authorChandrakanth Patil <chandrakanth.patil@broadcom.com>
Tue, 25 Jun 2019 11:04:28 +0000 (16:34 +0530)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 27 Jun 2019 04:07:35 +0000 (00:07 -0400)
RAID1 PCI bandwidth limit algorithm is not applicable to Aero as it's PCIe
Gen4 adapter.

Signed-off-by: Sumit Saxena <sumit.saxena@broadcom.com>
Signed-off-by: Chandrakanth Patil <chandrakanth.patil@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/megaraid/megaraid_sas_base.c
drivers/scsi/megaraid/megaraid_sas_fusion.c
drivers/scsi/megaraid/megaraid_sas_fusion.h

index a886de3..5244b6e 100644 (file)
@@ -5777,6 +5777,9 @@ static int megasas_init_fw(struct megasas_instance *instance)
                        MR_MAX_RAID_MAP_SIZE_MASK);
        }
 
+       if (instance->adapter_type == VENTURA_SERIES)
+               fusion->pcie_bw_limitation = true;
+
        /* Check if MSI-X is supported while in ready state */
        msix_enable = (instance->instancet->read_fw_status_reg(instance) &
                       0x4000000) >> 0x1a;
index 5121d4c..ad18474 100644 (file)
@@ -2621,9 +2621,10 @@ static void megasas_stream_detect(struct megasas_instance *instance,
  *
  */
 static void
-megasas_set_raidflag_cpu_affinity(union RAID_CONTEXT_UNION *praid_context,
-                                 struct MR_LD_RAID *raid, bool fp_possible,
-                                 u8 is_read, u32 scsi_buff_len)
+megasas_set_raidflag_cpu_affinity(struct fusion_context *fusion,
+                               union RAID_CONTEXT_UNION *praid_context,
+                               struct MR_LD_RAID *raid, bool fp_possible,
+                               u8 is_read, u32 scsi_buff_len)
 {
        u8 cpu_sel = MR_RAID_CTX_CPUSEL_0;
        struct RAID_CONTEXT_G35 *rctx_g35;
@@ -2681,11 +2682,11 @@ megasas_set_raidflag_cpu_affinity(union RAID_CONTEXT_UNION *praid_context,
         * vs MR_RAID_FLAGS_IO_SUB_TYPE_CACHE_BYPASS.
         * IO Subtype is not bitmap.
         */
-       if ((raid->level == 1) && (!is_read)) {
-               if (scsi_buff_len > MR_LARGE_IO_MIN_SIZE)
-                       praid_context->raid_context_g35.raid_flags =
-                               (MR_RAID_FLAGS_IO_SUB_TYPE_LDIO_BW_LIMIT
-                               << MR_RAID_CTX_RAID_FLAGS_IO_SUB_TYPE_SHIFT);
+       if ((fusion->pcie_bw_limitation) && (raid->level == 1) && (!is_read) &&
+                       (scsi_buff_len > MR_LARGE_IO_MIN_SIZE)) {
+               praid_context->raid_context_g35.raid_flags =
+                       (MR_RAID_FLAGS_IO_SUB_TYPE_LDIO_BW_LIMIT
+                       << MR_RAID_CTX_RAID_FLAGS_IO_SUB_TYPE_SHIFT);
        }
 }
 
@@ -2834,8 +2835,9 @@ megasas_build_ldio_fusion(struct megasas_instance *instance,
                                (instance->host->can_queue)) {
                                fp_possible = false;
                                atomic_dec(&instance->fw_outstanding);
-                       } else if ((scsi_buff_len > MR_LARGE_IO_MIN_SIZE) ||
-                                  (atomic_dec_if_positive(&mrdev_priv->r1_ldio_hint) > 0)) {
+                       } else if (fusion->pcie_bw_limitation &&
+                               ((scsi_buff_len > MR_LARGE_IO_MIN_SIZE) ||
+                                  (atomic_dec_if_positive(&mrdev_priv->r1_ldio_hint) > 0))) {
                                fp_possible = false;
                                atomic_dec(&instance->fw_outstanding);
                                if (scsi_buff_len > MR_LARGE_IO_MIN_SIZE)
@@ -2860,7 +2862,7 @@ megasas_build_ldio_fusion(struct megasas_instance *instance,
 
                /* If raid is NULL, set CPU affinity to default CPU0 */
                if (raid)
-                       megasas_set_raidflag_cpu_affinity(&io_request->RaidContext,
+                       megasas_set_raidflag_cpu_affinity(fusion, &io_request->RaidContext,
                                raid, fp_possible, io_info.isRead,
                                scsi_buff_len);
                else
index 9873829..b50da38 100644 (file)
@@ -1335,7 +1335,7 @@ struct fusion_context {
        dma_addr_t ioc_init_request_phys;
        struct MPI2_IOC_INIT_REQUEST *ioc_init_request;
        struct megasas_cmd *ioc_init_cmd;
-
+       bool pcie_bw_limitation;
 };
 
 union desc_value {