ufs: core: clear cmd if abort success in mcq mode
Subsystems (4)
PATCH 1/1 ufs: core: clear cmd if abort success in mcq mode
From: Peter Wang <[email protected]>
In mcq mode, if cmd is pending in device and abort success, response will not return from device. So we need clear this cmd right now, else command timeout happen and next time use same tag will have warning. WARN_ON(lrbp->cmd).
Below is error log:
<3>[ 2277.447611][T21376] ufshcd-mtk 112b0000.ufshci: ufshcd_try_to_abort_task: cmd pending in the device. tag = 7 <3>[ 2277.476954][T21376] ufshcd-mtk 112b0000.ufshci: Aborting tag 7 / CDB 0x2a succeeded <6>[ 2307.551263][T30974] ufshcd-mtk 112b0000.ufshci: ufshcd_abort: Device abort task at tag 7 <4>[ 2307.623264][ T327] WARNING: CPU: 5 PID: 327 at source/drivers/ufs/core/ufshcd.c:3021 ufshcd_queuecommand+0x66c/0xe34
Fixes ab248643d3d6 ("scsi: ufs: core: Add error handling for MCQ mode")
Signed-off-by Peter Wang <[email protected]>
--- drivers/ufs/core/ufshcd.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
drivers/ufs/core/ufshcd.c +10 -0
@@ -6449,6 +6449,16 @@ static bool ufshcd_abort_one(struct request *rq, void *priv)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 success */ +if (is_mcq_enabled (hba) && (*ret ==0 )) { + hwq =ufshcd_mcq_req_to_hwq (hba,scsi_cmd_to_rq (hba->lrb[tag].cmd)); +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 ; }
Signature · 1 line
2.18.0