On 2020-02-09 15:48, Avri Altman wrote:
You didn't address any of my comments to this patch.
Thanks,
Avri
Replied in that thread.
Thanks,
Can Guo.
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@xxxxxxxxxxxxxx>
Reviewed-by: Hongwu Su <hongwus@xxxxxxxxxxxxxx>
Reviewed-by: Asutosh Das <asutoshd@xxxxxxxxxxxxxx>
Reviewed-by: Bean Huo <beanhuo@xxxxxxxxxx>
Reviewed-by: Stanley Chu <stanley.chu@xxxxxxxxxxxx>
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);
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora
Forum,
a Linux Foundation Collaborative Project