Messages in this thread | | | Date | Thu, 19 Nov 2020 15:14:19 +0800 | From | Can Guo <> | Subject | Re: [PATCH v1] scsi: ufs: Fix race between shutdown and runtime resume flow |
| |
On 2020-11-19 14:29, Stanley Chu wrote: > If UFS host device is in runtime-suspended state while > UFS shutdown callback is invoked, UFS device shall be > resumed for register accesses. Currently only UFS local > runtime resume function will be invoked to wake up the host. > This is not enough because if someone triggers runtime > resume from block layer, then race may happen between > shutdown and runtime resume flow, and finally lead to > unlocked register access. > > To fix this kind of issues, in ufshcd_shutdown(), use > pm_runtime_get_sync() instead of resuming UFS device by > ufshcd_runtime_resume() "internally" to let runtime PM > framework manage the whole resume flow. > > Fixes: 57d104c153d3 ("ufs: add UFS power management support") > Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
Reviewed-by: Can Guo <cang@codeaurora.org>
> --- > drivers/scsi/ufs/ufshcd.c | 6 +----- > 1 file changed, 1 insertion(+), 5 deletions(-) > > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c > index 80cbce414678..bb16cc04f106 100644 > --- a/drivers/scsi/ufs/ufshcd.c > +++ b/drivers/scsi/ufs/ufshcd.c > @@ -8941,11 +8941,7 @@ int ufshcd_shutdown(struct ufs_hba *hba) > if (ufshcd_is_ufs_dev_poweroff(hba) && ufshcd_is_link_off(hba)) > goto out; > > - if (pm_runtime_suspended(hba->dev)) { > - ret = ufshcd_runtime_resume(hba); > - if (ret) > - goto out; > - } > + pm_runtime_get_sync(hba->dev); > > ret = ufshcd_suspend(hba, UFS_SHUTDOWN_PM); > out:
| |