scsi: ufs: Adjust ufshcd_hold() during sending attribute requests
authorjintae jang <jt77.jang@samsung.com>
Thu, 3 Dec 2020 05:25:32 +0000 (14:25 +0900)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 8 Dec 2020 01:21:53 +0000 (20:21 -0500)
Invalidation check of arguments should have been checked before
ufshcd_hold(). This can help to prevent ufshcd_hold()/ ufshcd_release()
from being invoked unnecessarily.

[mkp: removed unused out: labels]

Link: https://lore.kernel.org/r/1606973132-5937-1-git-send-email-user@jang-Samsung-DeskTop-System
Reviewed-by: Stanley Chu <stanley.chu@mediatek.com>
Signed-off-by: jintae jang <jt77.jang@samsung.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/ufs/ufshcd.c

index e754191dbf5fa1ba40b70070139e8a2ff7e2b400..a41ee9cd26bad04a9c172c6dc4ce58fdca492f95 100644 (file)
@@ -2975,14 +2975,14 @@ int ufshcd_query_attr(struct ufs_hba *hba, enum query_opcode opcode,
 
        BUG_ON(!hba);
 
-       ufshcd_hold(hba, false);
        if (!attr_val) {
                dev_err(hba->dev, "%s: attribute value required for opcode 0x%x\n",
                                __func__, opcode);
-               err = -EINVAL;
-               goto out;
+               return -EINVAL;
        }
 
+       ufshcd_hold(hba, false);
+
        mutex_lock(&hba->dev_cmd.lock);
        ufshcd_init_query(hba, &request, &response, opcode, idn, index,
                        selector);
@@ -3014,7 +3014,6 @@ int ufshcd_query_attr(struct ufs_hba *hba, enum query_opcode opcode,
 
 out_unlock:
        mutex_unlock(&hba->dev_cmd.lock);
-out:
        ufshcd_release(hba);
        return err;
 }
@@ -3066,21 +3065,20 @@ static int __ufshcd_query_descriptor(struct ufs_hba *hba,
 
        BUG_ON(!hba);
 
-       ufshcd_hold(hba, false);
        if (!desc_buf) {
                dev_err(hba->dev, "%s: descriptor buffer required for opcode 0x%x\n",
                                __func__, opcode);
-               err = -EINVAL;
-               goto out;
+               return -EINVAL;
        }
 
        if (*buf_len < QUERY_DESC_MIN_SIZE || *buf_len > QUERY_DESC_MAX_SIZE) {
                dev_err(hba->dev, "%s: descriptor buffer size (%d) is out of range\n",
                                __func__, *buf_len);
-               err = -EINVAL;
-               goto out;
+               return -EINVAL;
        }
 
+       ufshcd_hold(hba, false);
+
        mutex_lock(&hba->dev_cmd.lock);
        ufshcd_init_query(hba, &request, &response, opcode, idn, index,
                        selector);
@@ -3115,7 +3113,6 @@ static int __ufshcd_query_descriptor(struct ufs_hba *hba,
 out_unlock:
        hba->dev_cmd.query.descriptor = NULL;
        mutex_unlock(&hba->dev_cmd.lock);
-out:
        ufshcd_release(hba);
        return err;
 }