drivers/ufs/core/ufs-mcq.c | 6 ------ 1 file changed, 6 deletions(-)
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(-)
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;
}
--
2.25.1
> 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! -- Martin K. Petersen
On Mon, 2025-05-19 at 10:55 +0800, 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
>
> 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>
Reviewed-by: Peter Wang <peter.wang@mediatek.com>
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>
© 2016 - 2025 Red Hat, Inc.