Re: [PATCH v9 2/3] ufs: core: fix error handler process for MCQ abort

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 9/25/24 8:45 PM, Peter Wang (王信友) wrote:
diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index 24a32e2fd75e..06aa4ed1a9e6 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -5417,10 +5417,12 @@ ufshcd_transfer_rsp_status(struct ufs_hba *hba,
struct ufshcd_lrb *lrbp,
  		}
  		break;
  	case OCS_ABORTED:
-		result |= DID_ABORT << 16;
-		break;
  	case OCS_INVALID_COMMAND_STATUS:
  		result |= DID_REQUEUE << 16;
+		dev_warn(hba->dev,
+				"OCS %s from controller for tag %d\n",
+				(ocs == OCS_ABORTED? "aborted" :
"invalid"),
+				lrbp->task_tag);
  		break;
  	case OCS_INVALID_CMD_TABLE_ATTR:
  	case OCS_INVALID_PRDT_ATTR:
@@ -6466,26 +6468,12 @@ static bool ufshcd_abort_one(struct request
*rq, void *priv)
  	struct scsi_device *sdev = cmd->device;
  	struct Scsi_Host *shost = sdev->host;
  	struct ufs_hba *hba = shost_priv(shost);
-	struct ufshcd_lrb *lrbp = &hba->lrb[tag];
-	struct ufs_hw_queue *hwq;
-	unsigned long flags;
*ret = ufshcd_try_to_abort_task(hba, tag);
  	dev_err(hba->dev, "Aborting tag %d / CDB %#02x %s\n", tag,
  		hba->lrb[tag].cmd ? hba->lrb[tag].cmd->cmnd[0] : -1,
  		*ret ? "failed" : "succeeded");
- /* Release cmd in MCQ mode if abort succeeds */
-	if (hba->mcq_enabled && (*ret == 0)) {
-		hwq = ufshcd_mcq_req_to_hwq(hba, scsi_cmd_to_rq(lrbp-
cmd));
-		if (!hwq)
-			return 0;
-		spin_lock_irqsave(&hwq->cq_lock, flags);
-		if (ufshcd_cmd_inflight(lrbp->cmd))
-			ufshcd_release_scsi_cmd(hba, lrbp);
-		spin_unlock_irqrestore(&hwq->cq_lock, flags);
-	}
-
  	return *ret == 0;
  }
---------------------------------------------------------------------


This patch has several advantages:

1. It makes the patch 'ufs: core: fix the issue of ICU failure'
    seem valuable.
2. The patch is more concise.
3. There is no need to fetch OCS to determine OCS: ABORTED
    on every CQ completion, which increases ISR time.
4. The err_handler flow for SDB and MCQ would be consistent.
5. There is no need for the MediaTek SDB quirk.


What do you think?"

Hi Peter,

Is the above patch sufficient? In MCQ mode, aborting a command happens
as follows (simplified):
(1) Send the ABORT TASK TMF. If this TMF succeeds, no SQE will be
    generated. If this TMF succeeds it means that the SCSI command has
    reached the UFS device and hence is no longer present in any
    submission queue (SQ).
(2) If the command is still in a submission queue, nullify the SQE. In
    this case a CQE will be generated with status ABORTED.

It seems to me that the above patch handles (2) but not (1)?

Thanks,

Bart.





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux