/*Aero performance parameters*/
 #define MR_HIGH_IOPS_QUEUE_COUNT       8
+#define MR_DEVICE_HIGH_IOPS_DEPTH      8
+#define MR_HIGH_IOPS_BATCH_COUNT       16
 
 struct megasas_instance {
 
        atomic_t ldio_outstanding;
        atomic_t fw_reset_no_pci_access;
        atomic64_t total_io_count;
+       atomic64_t high_iops_outstanding;
 
        struct megasas_instance_template *instancet;
        struct tasklet_struct isr_tasklet;
 
        io_info.r1_alt_dev_handle = MR_DEVHANDLE_INVALID;
        scsi_buff_len = scsi_bufflen(scp);
        io_request->DataLength = cpu_to_le32(scsi_buff_len);
+       io_info.data_arms = 1;
 
        if (scp->sc_data_direction == DMA_FROM_DEVICE)
                io_info.isRead = 1;
                        fp_possible = (io_info.fpOkForIo > 0) ? true : false;
        }
 
-       if (instance->msix_load_balance)
+       if (instance->balanced_mode &&
+               atomic_read(&scp->device->device_busy) >
+               (io_info.data_arms * MR_DEVICE_HIGH_IOPS_DEPTH))
+               cmd->request_desc->SCSIIO.MSIxIndex =
+                       mega_mod64((atomic64_add_return(1, &instance->high_iops_outstanding) /
+                               MR_HIGH_IOPS_BATCH_COUNT), instance->low_latency_index_start);
+       else if (instance->msix_load_balance)
                cmd->request_desc->SCSIIO.MSIxIndex =
                        (mega_mod64(atomic64_add_return(1, &instance->total_io_count),
                                    instance->msix_vectors));
 
        cmd->request_desc->SCSIIO.DevHandle = io_request->DevHandle;
 
-       if (instance->msix_load_balance)
+       if (instance->balanced_mode &&
+               atomic_read(&scmd->device->device_busy) > MR_DEVICE_HIGH_IOPS_DEPTH)
+               cmd->request_desc->SCSIIO.MSIxIndex =
+                       mega_mod64((atomic64_add_return(1, &instance->high_iops_outstanding) /
+                               MR_HIGH_IOPS_BATCH_COUNT), instance->low_latency_index_start);
+       else if (instance->msix_load_balance)
                cmd->request_desc->SCSIIO.MSIxIndex =
                        (mega_mod64(atomic64_add_return(1, &instance->total_io_count),
                                    instance->msix_vectors));