All of lore.kernel.org
 help / color / mirror / Atom feed
From: Imre Deak <imre.deak@intel.com>
To: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: Pavel Machek <pavel@ucw.cz>,
	linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] PM / Sleep: fix recovery during s2ram/hibernation
Date: Fri, 24 Oct 2014 17:17:12 +0300	[thread overview]
Message-ID: <1414160232.30585.36.camel@intelbox> (raw)
In-Reply-To: <6868563.CWP0SXTtWm@vostro.rjw.lan>

On Fri, 2014-10-24 at 16:04 +0200, Rafael J. Wysocki wrote:
> On Friday, October 24, 2014 10:59:09 AM Imre Deak wrote:
> > Atm, if one of the dev_pm_ops::freeze callbacks fails during the QUIESCE
> > phase we don't rollback things correctly calling the thaw and complete
> > callbacks. This could leave some devices in a suspended state in case of
> > an error during resuming from hibernation.
> > 
> > Also if an asynchronous suspend_late or freeze_late callback fails
> > during the SUSPEND, FREEZE or QUIESCE phases we don't propagate the
> > corresponding error correctly, in effect ignoring the error and
> > continuing the suspend-to-ram/hibernation. During suspend-to-ram this
> > could leave some devices without a valid saved context, leading to a
> > failure to reinitialize them during resume. During hibernation this
> > could leave some devices active interfeering with the creation /
> > restoration of the hibernation image. Also this could leave the
> > corresponding devices without a valid saved context and failure to
> > reinitialize them during resume.
> > 
> > v2:
> > - call dpm_resume_end() unconditionally, it's guaranteed that error
> >   is non-zero
> > 
> > Signed-off-by: Imre Deak <imre.deak@intel.com>
> 
> These are two unrelated fixes, so please send them as two patches.
> 
> > ---
> >  drivers/base/power/main.c | 2 ++
> >  kernel/power/hibernate.c  | 3 ++-
> >  2 files changed, 4 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
> > index 4497319..9717d5f 100644
> > --- a/drivers/base/power/main.c
> > +++ b/drivers/base/power/main.c
> > @@ -1266,6 +1266,8 @@ int dpm_suspend_late(pm_message_t state)
> >  	}
> >  	mutex_unlock(&dpm_list_mtx);
> >  	async_synchronize_full();
> > +	if (!error)
> > +		error = async_error;
> >  	if (error) {
> >  		suspend_stats.failed_suspend_late++;
> >  		dpm_save_failed_step(SUSPEND_SUSPEND_LATE);
> 
> So the above will be the first fix and the below will be the second one.

Ok.

> 
> > diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
> > index a9dfa79..594ee7f 100644
> > --- a/kernel/power/hibernate.c
> > +++ b/kernel/power/hibernate.c
> > @@ -502,8 +502,9 @@ int hibernation_restore(int platform_mode)
> >  	error = dpm_suspend_start(PMSG_QUIESCE);
> >  	if (!error) {
> >  		error = resume_target_kernel(platform_mode);
> > -		dpm_resume_end(PMSG_RECOVER);
> > +		BUG_ON(!error);
> 
> Why BUG_ON()?  Is crashing the kernel necessary here?

I figured that this being an undefined state after restoration of a
memory image, it's better to crash than to continue and risk corrupting
some user data.

> 
> >  	}
> > +	dpm_resume_end(PMSG_RECOVER);
> >  	pm_restore_gfp_mask();
> >  	resume_console();
> >  	pm_restore_console();
> > 
> 



  reply	other threads:[~2014-10-24 14:17 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-24  7:43 [PATCH] PM / Sleep: fix recovery during s2ram/hibernation Imre Deak
2014-10-24  7:59 ` [PATCH v2] " Imre Deak
2014-10-24 14:04   ` Rafael J. Wysocki
2014-10-24 14:17     ` Imre Deak [this message]
2014-10-24 14:54       ` Rafael J. Wysocki
2014-10-24 17:29   ` [PATCH v3 1/2] PM / Sleep: fix async suspend_late/freeze_late error handling Imre Deak
2014-10-27 22:45     ` Rafael J. Wysocki
2014-10-24 17:29   ` [PATCH v3 2/2] PM / Sleep: fix recovery during resuming from hibernation Imre Deak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1414160232.30585.36.camel@intelbox \
    --to=imre.deak@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=pavel@ucw.cz \
    --cc=rjw@rjwysocki.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.