scsi: aacraid: Set correct Queue Depth for HBA1000 RAW disks
authorRaghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com>
Wed, 10 May 2017 16:39:38 +0000 (09:39 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 13 Jun 2017 00:47:59 +0000 (20:47 -0400)
The default queue depth for non NATIVE RAW disks is calculated from the
number of fibs and number of disks or a max of 256. This causes poor disk
IO performance.

The fix is to set default qd based on the type of disks
(SATA -32 and SAS -64)

Signed-off-by: Raghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com>
Reviewed-by: David Carroll <david.carroll@microsemi.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/aacraid/linit.c

index 5e1a2d67d90c008b21b8e0bebf325782162a6eee..9ef98e40d81a01bce8fd0b4a95355a89e18616d1 100644 (file)
@@ -405,17 +405,23 @@ static int aac_slave_configure(struct scsi_device *sdev)
        int chn, tid;
        unsigned int depth = 0;
        unsigned int set_timeout = 0;
+       bool set_qd_dev_type = false;
+       u8 devtype = 0;
 
        chn = aac_logical_to_phys(sdev_channel(sdev));
        tid = sdev_id(sdev);
-       if (chn < AAC_MAX_BUSES && tid < AAC_MAX_TARGETS &&
-               aac->hba_map[chn][tid].devtype == AAC_DEVTYPE_NATIVE_RAW) {
-               depth = aac->hba_map[chn][tid].qd_limit;
+       if (chn < AAC_MAX_BUSES && tid < AAC_MAX_TARGETS && aac->sa_firmware) {
+               devtype = aac->hba_map[chn][tid].devtype;
+
+               if (devtype == AAC_DEVTYPE_NATIVE_RAW)
+                       depth = aac->hba_map[chn][tid].qd_limit;
+               else if (devtype == AAC_DEVTYPE_ARC_RAW)
+                       set_qd_dev_type = true;
+
                set_timeout = 1;
                goto common_config;
        }
 
-
        if (aac->jbod && (sdev->type == TYPE_DISK))
                sdev->removable = 1;
 
@@ -470,16 +476,22 @@ static int aac_slave_configure(struct scsi_device *sdev)
                if (sdev_channel(sdev) != NATIVE_CHANNEL)
                        goto common_config;
 
-               /*
-                * Check if SATA drive
-                */
+               set_qd_dev_type = true;
+
+       }
+
+common_config:
+
+       /*
+        * Check if SATA drive
+        */
+       if (set_qd_dev_type) {
                if (strncmp(sdev->vendor, "ATA", 3) == 0)
                        depth = 32;
                else
                        depth = 64;
        }
 
-common_config:
        /*
         * Firmware has an individual device recovery time typically
         * of 35 seconds, give us a margin.