summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/aacraid
diff options
context:
space:
mode:
authorRaghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com>2017-12-27 05:34:38 +0100
committerMartin K. Petersen <martin.petersen@oracle.com>2018-01-04 05:26:42 +0100
commit0bcb45fb20c2195fe0ae175d4775241e672a5fd3 (patch)
treee8b0b2628a6f4999275ed1ed6a6659bcca732d5e /drivers/scsi/aacraid
parentscsi: aacraid: Save bmic phy information for each phy (diff)
downloadlinux-0bcb45fb20c2195fe0ae175d4775241e672a5fd3.tar.xz
linux-0bcb45fb20c2195fe0ae175d4775241e672a5fd3.zip
scsi: aacraid: Add helper function to set queue depth
Add helper function to set queue depth from information retrieved from the bmic phy structure. Signed-off-by: Raghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi/aacraid')
-rw-r--r--drivers/scsi/aacraid/aachba.c37
1 files changed, 24 insertions, 13 deletions
diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c
index baa3de5dd8df..67ca5af32e02 100644
--- a/drivers/scsi/aacraid/aachba.c
+++ b/drivers/scsi/aacraid/aachba.c
@@ -1755,6 +1755,28 @@ fib_error:
return rcode;
}
+static void aac_set_safw_target_qd(struct aac_dev *dev, int bus, int target)
+{
+
+ struct aac_ciss_identify_pd *identify_resp;
+
+ if (dev->hba_map[bus][target].devtype != AAC_DEVTYPE_NATIVE_RAW)
+ return;
+
+ identify_resp = dev->hba_map[bus][target].safw_identify_resp;
+ if (identify_resp == NULL) {
+ dev->hba_map[bus][target].qd_limit = 32;
+ return;
+ }
+
+ if (identify_resp->current_queue_depth_limit <= 0 ||
+ identify_resp->current_queue_depth_limit > 255)
+ dev->hba_map[bus][target].qd_limit = 32;
+ else
+ dev->hba_map[bus][target].qd_limit =
+ identify_resp->current_queue_depth_limit;
+}
+
static int aac_issue_safw_bmic_identify(struct aac_dev *dev,
struct aac_ciss_identify_pd **identify_resp, u32 bus, u32 target)
{
@@ -1781,13 +1803,6 @@ static int aac_issue_safw_bmic_identify(struct aac_dev *dev,
if (unlikely(rcode < 0))
goto mem_free_all;
- if (identify_reply->current_queue_depth_limit <= 0 ||
- identify_reply->current_queue_depth_limit > 32)
- dev->hba_map[bus][target].qd_limit = 32;
- else
- dev->hba_map[bus][target].qd_limit =
- identify_reply->current_queue_depth_limit;
-
*identify_resp = identify_reply;
out:
@@ -1936,17 +1951,14 @@ static int aac_get_safw_attr_all_targets(struct aac_dev *dev, int rescan)
rcode = aac_issue_safw_bmic_identify(dev,
&identify_resp, bus, target);
- if (unlikely(rcode < 0)) {
- dev->hba_map[bus][target].qd_limit = 32;
+ if (unlikely(rcode < 0))
goto free_identify_resp;
- }
dev->hba_map[bus][target].safw_identify_resp = identify_resp;
}
out:
return rcode;
-
free_identify_resp:
aac_free_safw_all_identify_resp(dev, i);
goto out;
@@ -1995,8 +2007,7 @@ static void aac_set_safw_attr_all_targets(struct aac_dev *dev, int rescan)
} else
devtype = AAC_DEVTYPE_ARC_RAW;
- if (devtype != AAC_DEVTYPE_NATIVE_RAW)
- goto update_devtype;
+ aac_set_safw_target_qd(dev, bus, target);
update_devtype:
if (rescan == AAC_INIT)