Re: [PATCH v3 1/9] scsi: ufs: Differentiate status between hba pm ops and wl pm ops

From: Bart Van Assche
Date: Wed Jun 16 2021 - 13:50:16 EST


On 6/9/21 9:43 PM, Can Guo wrote:
> @@ -8784,7 +8786,7 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
> enum ufs_dev_pwr_mode req_dev_pwr_mode;
> enum uic_link_state req_link_state;
>
> - hba->pm_op_in_progress = true;
> + hba->wl_pm_op_in_progress = true;
> if (pm_op != UFS_SHUTDOWN_PM) {
> pm_lvl = pm_op == UFS_RUNTIME_PM ?
> hba->rpm_lvl : hba->spm_lvl;
> @@ -8919,7 +8921,7 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
> hba->clk_gating.is_suspended = false;
> ufshcd_release(hba);
> }
> - hba->pm_op_in_progress = false;
> + hba->wl_pm_op_in_progress = false;
> return ret;
> }

Are the __ufshcd_wl_suspend() calls serialized in any way? If not, will
the value of wl_pm_op_in_progress be incorrect if multiple kernel
threads run __ufshcd_wl_suspend() concurrently and one of the
__ufshcd_wl_suspend() instances returns earlier than the other?

Thanks,

Bart.