@@ -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(-)