forked from Minki/linux
scsi: ufs: Properly release resources if a task is aborted successfully
In current UFS task abort hook, namely ufshcd_abort(), if one task is
aborted successfully, clk_gating.active_reqs held by this task is not
decreased, which makes clk_gating.active_reqs stay above zero forever, thus
clock gating would never happen. Instead of releasing resources of one task
"manually", use the existing func __ufshcd_transfer_req_compl(). This
change also eliminates a possible race of scsi_dma_unmap() from the real
completion in IRQ handler path.
Link: https://lore.kernel.org/r/1596975355-39813-10-git-send-email-cang@codeaurora.org
Fixes: 1ab27c9cf8
("ufs: Add support for clock gating")
CC: Stanley Chu <stanley.chu@mediatek.com>
Reviewed-by: Stanley Chu <stanley.chu@mediatek.com>
Reviewed-by: Asutosh Das <asutoshd@codeaurora.org>
Signed-off-by: Can Guo <cang@codeaurora.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
5586dd8ea2
commit
8bb2dde069
@ -6636,11 +6636,8 @@ static int ufshcd_abort(struct scsi_cmnd *cmd)
|
||||
goto out;
|
||||
}
|
||||
|
||||
scsi_dma_unmap(cmd);
|
||||
|
||||
spin_lock_irqsave(host->host_lock, flags);
|
||||
ufshcd_outstanding_req_clear(hba, tag);
|
||||
hba->lrb[tag].cmd = NULL;
|
||||
__ufshcd_transfer_req_compl(hba, (1UL << tag));
|
||||
spin_unlock_irqrestore(host->host_lock, flags);
|
||||
|
||||
out:
|
||||
|
Loading…
Reference in New Issue
Block a user