Message ID | 20250519025559.1263821-1-ping.gao@samsung.com |
---|---|
State | New |
Headers | show |
Series | scsi: ufs: mcq: delete ufshcd_release_scsi_cmd in ufshcd_mcq_abort | expand |
On 5/18/25 7:55 PM, ping.gao wrote: > after ufs UFS_ABORT_TASK process successfully , host will generate > mcq irq for abort tag with response OCS_ABORTED > ufshcd_compl_one_cqe -> > ufshcd_release_scsi_cmd Reviewed-by: Bart Van Assche <bvanassche@acm.org>
> after ufs UFS_ABORT_TASK process successfully , host will generate > mcq irq for abort tag with response OCS_ABORTED > ufshcd_compl_one_cqe -> > ufshcd_release_scsi_cmd > > But in ufshcd_mcq_abort already do ufshcd_release_scsi_cmd, this means > __ufshcd_release will be done twice. > > This means hba->clk_gating.active_reqs also will be decrease twice, it > will be negtive, so delete ufshcd_release_scsi_cmd in ufshcd_mcq_abort > function. Applied to 6.16/scsi-staging, thanks!
diff --git a/drivers/ufs/core/ufs-mcq.c b/drivers/ufs/core/ufs-mcq.c index f1294c29f484..1e50675772fe 100644 --- a/drivers/ufs/core/ufs-mcq.c +++ b/drivers/ufs/core/ufs-mcq.c @@ -674,7 +674,6 @@ int ufshcd_mcq_abort(struct scsi_cmnd *cmd) int tag = scsi_cmd_to_rq(cmd)->tag; struct ufshcd_lrb *lrbp = &hba->lrb[tag]; struct ufs_hw_queue *hwq; - unsigned long flags; int err; /* Skip task abort in case previous aborts failed and report failure */ @@ -713,10 +712,5 @@ int ufshcd_mcq_abort(struct scsi_cmnd *cmd) return FAILED; } - 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 SUCCESS; }
after ufs UFS_ABORT_TASK process successfully , host will generate mcq irq for abort tag with response OCS_ABORTED ufshcd_compl_one_cqe -> ufshcd_release_scsi_cmd But in ufshcd_mcq_abort already do ufshcd_release_scsi_cmd, this means __ufshcd_release will be done twice. This means hba->clk_gating.active_reqs also will be decrease twice, it will be negtive, so delete ufshcd_release_scsi_cmd in ufshcd_mcq_abort function. static void __ufshcd_release(struct ufs_hba *hba) { if (!ufshcd_is_clkgating_allowed(hba)) return; hba->clk_gating.active_reqs--; if (hba->clk_gating.active_reqs < 0) { panic("ufs abnormal active_reqs!!!!!!"); } ... } Fixes: f1304d442077 ("scsi: ufs: mcq: Added ufshcd_mcq_abort()") Signed-off-by: ping.gao <ping.gao@samsung.com> --- drivers/ufs/core/ufs-mcq.c | 6 ------ 1 file changed, 6 deletions(-)