Commit 1a547cbc authored by Bart Van Assche's avatar Bart Van Assche Committed by Martin K. Petersen

scsi: ufs: Track system suspend / resume activity

Add a new boolean variable that tracks whether the system is suspending,
suspended or resuming. This information will be used in a later commit to
fix a deadlock between the SCSI error handler and the suspend code.
Reviewed-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
Link: https://lore.kernel.org/r/20221018202958.1902564-9-bvanassche@acm.orgSigned-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 579a4e9d
...@@ -9247,6 +9247,7 @@ static int ufshcd_wl_suspend(struct device *dev) ...@@ -9247,6 +9247,7 @@ static int ufshcd_wl_suspend(struct device *dev)
hba = shost_priv(sdev->host); hba = shost_priv(sdev->host);
down(&hba->host_sem); down(&hba->host_sem);
hba->system_suspending = true;
if (pm_runtime_suspended(dev)) if (pm_runtime_suspended(dev))
goto out; goto out;
...@@ -9288,6 +9289,7 @@ static int ufshcd_wl_resume(struct device *dev) ...@@ -9288,6 +9289,7 @@ static int ufshcd_wl_resume(struct device *dev)
hba->curr_dev_pwr_mode, hba->uic_link_state); hba->curr_dev_pwr_mode, hba->uic_link_state);
if (!ret) if (!ret)
hba->is_sys_suspended = false; hba->is_sys_suspended = false;
hba->system_suspending = false;
up(&hba->host_sem); up(&hba->host_sem);
return ret; return ret;
} }
......
...@@ -802,7 +802,9 @@ struct ufs_hba_monitor { ...@@ -802,7 +802,9 @@ struct ufs_hba_monitor {
* @caps: bitmask with information about UFS controller capabilities * @caps: bitmask with information about UFS controller capabilities
* @devfreq: frequency scaling information owned by the devfreq core * @devfreq: frequency scaling information owned by the devfreq core
* @clk_scaling: frequency scaling information owned by the UFS driver * @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 * @urgent_bkops_lvl: keeps track of urgent bkops level for device
* @is_urgent_bkops_lvl_checked: keeps track if the urgent bkops level for * @is_urgent_bkops_lvl_checked: keeps track if the urgent bkops level for
* device is known or not. * device is known or not.
...@@ -943,6 +945,7 @@ struct ufs_hba { ...@@ -943,6 +945,7 @@ struct ufs_hba {
struct devfreq *devfreq; struct devfreq *devfreq;
struct ufs_clk_scaling clk_scaling; struct ufs_clk_scaling clk_scaling;
bool system_suspending;
bool is_sys_suspended; bool is_sys_suspended;
enum bkops_status urgent_bkops_lvl; enum bkops_status urgent_bkops_lvl;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment