On Wed, Jul 9, 2025 at 12:05 PM Samuel Zhang <guoqing.zh...@amd.com> wrote: > > dev_pm_ops.thaw() is called in following cases: > * normal case: after hibernation image has been created. > * error case 1: creation of a hibernation image has failed. > * error case 2: restoration from a hibernation image has failed. > > For normal case, it is called mainly for resume storage devices for > saving the hibernation image. Other devices that are not involved > in the image saving do not need to resume the device. But since there's > no api to know which case thaw() is called, device drivers can't > conditionally resume device in thaw(). > > The new pm_hibernate_is_recovering() is such a api to query if thaw() is > called in normal case. > > Signed-off-by: Samuel Zhang <guoqing.zh...@amd.com> > --- > drivers/base/power/main.c | 14 ++++++++++++++ > include/linux/pm.h | 2 ++ > 2 files changed, 16 insertions(+) > > diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c > index 40e1d8d8a589..ff78cf96f795 100644 > --- a/drivers/base/power/main.c > +++ b/drivers/base/power/main.c > @@ -63,6 +63,20 @@ static LIST_HEAD(dpm_noirq_list); > static DEFINE_MUTEX(dpm_list_mtx); > static pm_message_t pm_transition; > > +/** > + * pm_hibernate_is_recovering - if recovering from hibernate due to error. > + * > + * Used to query if dev_pm_ops.thaw() is called for normal hibernation case > or > + * recovering from some error. > + * > + * Return: true for error case, false for normal case. > + */ > +bool pm_hibernate_is_recovering(void) > +{ > + return pm_transition.event == PM_EVENT_RECOVER; > +} > +EXPORT_SYMBOL_GPL(pm_hibernate_is_recovering); > + > static int async_error; > > static const char *pm_verb(int event) > diff --git a/include/linux/pm.h b/include/linux/pm.h > index 78855d794342..f54a803f2afb 100644 > --- a/include/linux/pm.h > +++ b/include/linux/pm.h > @@ -657,6 +657,8 @@ struct pm_subsys_data { > #define DPM_FLAG_SMART_SUSPEND BIT(2) > #define DPM_FLAG_MAY_SKIP_RESUME BIT(3) > > +bool pm_hibernate_is_recovering(void); > +
Please add this to suspend.h instead (preferably after the is_hibernate_resume_dev definition). > struct dev_pm_info { > pm_message_t power_state; > bool can_wakeup:1; > --