Re: [PATCH v3 7/8] scsi: ufs: Track system suspend / resume activity

Adrian Hunter
2022-10-03T06:11:04Z

On 30/09/22 01:00, Bart Van Assche wrote:
> Add a new boolean variable that tracks whether the system is suspending,
> suspended or resuming. This information will be used in a later patch to
> fix a deadlock between the SCSI error handler and the suspend code.
>
> Signed-off-by: Bart Van Assche <bvanassche@acm.org>

Reviewed-by: Adrian Hunter <adrian.hunter@intel.com>

> ---
> drivers/ufs/core/ufshcd.c | 2 ++
> include/ufs/ufshcd.h | 5 ++++-
> 2 files changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> index e8c0504e9e83..5507d93a4bba 100644
> --- a/drivers/ufs/core/ufshcd.c
> +++ b/drivers/ufs/core/ufshcd.c
> @@ -9253,6 +9253,7 @@ static int ufshcd_wl_suspend(struct device *dev)
>
> hba = shost_priv(sdev->host);
> down(&hba->host_sem);
> + hba->system_suspending = true;
>
> if (pm_runtime_suspended(dev))
> goto out;
> @@ -9294,6 +9295,7 @@ static int ufshcd_wl_resume(struct device *dev)
> hba->curr_dev_pwr_mode, hba->uic_link_state);
> if (!ret)
> hba->is_sys_suspended = false;
> + hba->system_suspending = false;
> up(&hba->host_sem);
> return ret;
> }
> diff --git a/include/ufs/ufshcd.h b/include/ufs/ufshcd.h
> index 9f28349ebcff..96538eb3a6c0 100644
> --- a/include/ufs/ufshcd.h
> +++ b/include/ufs/ufshcd.h
> @@ -802,7 +802,9 @@ struct ufs_hba_monitor {
> * @caps: bitmask with information about UFS controller capabilities
> * @devfreq: frequency scaling information owned by the devfreq core
> * @clk_scaling: frequency scaling information owned by the UFS driver
> - * @is_sys_suspended: whether or not the entire system has been suspended
> + * @system_suspending: system suspend has been started and system resume has
> + * not yet finished.
> + * @is_sys_suspended: UFS device has been suspended because of system suspend
> * @urgent_bkops_lvl: keeps track of urgent bkops level for device
> * @is_urgent_bkops_lvl_checked: keeps track if the urgent bkops level for
> * device is known or not.
> @@ -943,6 +945,7 @@ struct ufs_hba {
>
> struct devfreq *devfreq;
> struct ufs_clk_scaling clk_scaling;
> + bool system_suspending;
> bool is_sys_suspended;
>
> enum bkops_status urgent_bkops_lvl;