]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
scsi: ufs: core: Fix ufshcd_is_ufs_dev_busy() and ufshcd_eh_timed_out()
authorBart Van Assche <bvanassche@acm.org>
Fri, 14 Feb 2025 22:43:44 +0000 (14:43 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 19 Feb 2025 01:51:32 +0000 (20:51 -0500)
ufshcd_is_ufs_dev_busy(), ufshcd_print_host_state() and
ufshcd_eh_timed_out() are used in both modes (legacy mode and MCQ mode).
hba->outstanding_reqs only represents the outstanding requests in legacy
mode. Hence, change hba->outstanding_reqs into scsi_host_busy(hba->host) in
these functions.

Fixes: eacb139b77ff ("scsi: ufs: core: mcq: Enable multi-circular queue")
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Link: https://lore.kernel.org/r/20250214224352.3025151-1-bvanassche@acm.org
Reviewed-by: Peter Wang <peter.wang@mediatek.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/ufs/core/ufshcd.c

index 1893a7ad95316b45bb4a554fcb743b64c0a257d3..f9303e66bb7982f3593c3fac149ce10e5db000f7 100644 (file)
@@ -266,7 +266,7 @@ static bool ufshcd_has_pending_tasks(struct ufs_hba *hba)
 
 static bool ufshcd_is_ufs_dev_busy(struct ufs_hba *hba)
 {
-       return hba->outstanding_reqs || ufshcd_has_pending_tasks(hba);
+       return scsi_host_busy(hba->host) || ufshcd_has_pending_tasks(hba);
 }
 
 static const struct ufs_dev_quirk ufs_fixups[] = {
@@ -628,8 +628,8 @@ static void ufshcd_print_host_state(struct ufs_hba *hba)
        const struct scsi_device *sdev_ufs = hba->ufs_device_wlun;
 
        dev_err(hba->dev, "UFS Host state=%d\n", hba->ufshcd_state);
-       dev_err(hba->dev, "outstanding reqs=0x%lx tasks=0x%lx\n",
-               hba->outstanding_reqs, hba->outstanding_tasks);
+       dev_err(hba->dev, "%d outstanding reqs, tasks=0x%lx\n",
+               scsi_host_busy(hba->host), hba->outstanding_tasks);
        dev_err(hba->dev, "saved_err=0x%x, saved_uic_err=0x%x\n",
                hba->saved_err, hba->saved_uic_err);
        dev_err(hba->dev, "Device power mode=%d, UIC link state=%d\n",
@@ -8882,7 +8882,7 @@ static enum scsi_timeout_action ufshcd_eh_timed_out(struct scsi_cmnd *scmd)
        dev_info(hba->dev, "%s() finished; outstanding_tasks = %#lx.\n",
                 __func__, hba->outstanding_tasks);
 
-       return hba->outstanding_reqs ? SCSI_EH_RESET_TIMER : SCSI_EH_DONE;
+       return scsi_host_busy(hba->host) ? SCSI_EH_RESET_TIMER : SCSI_EH_DONE;
 }
 
 static const struct attribute_group *ufshcd_driver_groups[] = {