Message ID | 1580721472-10784-6-git-send-email-cang@codeaurora.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | UFS driver general fixes bundle 4 | expand |
> Signed-off-by: Can Guo <cang@codeaurora.org> > Reviewed-by: Hongwu Su <hongwus@codeaurora.org> > Reviewed-by: Asutosh Das <asutoshd@codeaurora.org> Reviewed-by: Bean Huo <beanhuo@micron.com>
On Mon, 2020-02-03 at 01:17 -0800, Can Guo wrote: > The async version of ufshcd_hold(async == true), which is only called > in queuecommand path as for now, is expected to work in atomic context, > thus it should not sleep or schedule out. When it runs into the condition > that clocks are ON but link is still in hibern8 state, it should bail out > without flushing the clock ungate work. > > Signed-off-by: Can Guo <cang@codeaurora.org> > Reviewed-by: Hongwu Su <hongwus@codeaurora.org> > Reviewed-by: Asutosh Das <asutoshd@codeaurora.org> Reviewed-by: Stanley Chu <stanley.chu@mediatek.com>
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index bbc2607..e8f7f9d 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -1518,6 +1518,11 @@ int ufshcd_hold(struct ufs_hba *hba, bool async) */ if (ufshcd_can_hibern8_during_gating(hba) && ufshcd_is_link_hibern8(hba)) { + if (async) { + rc = -EAGAIN; + hba->clk_gating.active_reqs--; + break; + } spin_unlock_irqrestore(hba->host->host_lock, flags); flush_work(&hba->clk_gating.ungate_work); spin_lock_irqsave(hba->host->host_lock, flags);