Hi Can, On Fri, 2019-11-15 at 15:03 +0800, Can Guo wrote: > On 2019-11-15 14:35, Stanley Chu wrote: > > Hi Can, > > > > On Thu, 2019-11-14 at 22:09 -0800, Can Guo wrote: > >> + if (hba->ahit != ahit) > >> + hba->ahit = ahit; > >> spin_unlock_irqrestore(hba->host->host_lock, flags); > >> + if (!pm_runtime_suspended(hba->dev)) { > > > > Always do pm_runtime_get_sync() here could avoid possible racing? > > > > And thus AH8 could be enabled regardless of runtime status. > > > >> + pm_runtime_get_sync(hba->dev); > >> + ufshcd_hold(hba, false); > >> + ufshcd_auto_hibern8_enable(hba); > >> + ufshcd_release(hba); > >> + pm_runtime_put(hba->dev); > >> + } > >> } > > > > Thanks, > > Stanley > > Hi Stanley, > > if !pm_runtime_suspended() is true, hba->dev's runtime status, other > than RPM_ACTIVE, > may be RPM_SUSPENDING or RPM_RESUMING. So, here for safty, do > pm_runtime_get_sync() once > before access registers, in case we hit corner cases in which powers > and/or clocks are OFF. > Thanks for explanation. I fully understand the intention of this patch. Just wonder if "if (!pm_runtime_suspended(hba->dev))" could be removed and then always do pm_runtime_get_sync() here. This could avoid possible racing and enable AH8 regardless of current runtime status. > Thanks, > Can Guo. Thanks, Stanley