scsi: ufs: Avoid messing up the compl_time_stamp of lrbs
authorCan Guo <cang@codeaurora.org>
Tue, 26 Nov 2019 06:53:32 +0000 (22:53 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 20 Dec 2019 03:08:52 +0000 (22:08 -0500)
To be on the safe side, do not touch lrb after clearing its slot in the
lrb_in_use bitmap to avoid messing up the next task which would possibly
occupy this lrb.

[mkp: applied by hand]

Link: https://lore.kernel.org/r/1574751214-8321-4-git-send-email-cang@qti.qualcomm.com
Reviewed by: Avri Altman <avri.altman@wdc.com>
Reviewed-by: Bean Huo <beanhuo@micron.com>
Signed-off-by: Can Guo <cang@codeaurora.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/ufs/ufshcd.c

index 839cb7b..e91dc57 100644 (file)
@@ -4793,11 +4793,13 @@ static void __ufshcd_transfer_req_compl(struct ufs_hba *hba,
                        cmd->result = result;
                        /* Mark completed command as NULL in LRB */
                        lrbp->cmd = NULL;
+                       lrbp->compl_time_stamp = ktime_get();
                        /* Do not touch lrbp after scsi done */
                        cmd->scsi_done(cmd);
                        __ufshcd_release(hba);
                } else if (lrbp->command_type == UTP_CMD_TYPE_DEV_MANAGE ||
                        lrbp->command_type == UTP_CMD_TYPE_UFS_STORAGE) {
+                       lrbp->compl_time_stamp = ktime_get();
                        if (hba->dev_cmd.complete) {
                                ufshcd_add_command_trace(hba, index,
                                                "dev_complete");
@@ -4806,8 +4808,6 @@ static void __ufshcd_transfer_req_compl(struct ufs_hba *hba,
                }
                if (ufshcd_is_clkscaling_supported(hba))
                        hba->clk_scaling.active_reqs--;
-
-               lrbp->compl_time_stamp = ktime_get();
        }
 
        /* clear corresponding bits of completed commands */