From: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com>
To: Bojan Smojver <bojan@rexursive.com>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>,
Linux PM list <linux-pm@vger.kernel.org>,
linux-kernel@vger.kernel.org, bp@alien8.de
Subject: Re: [PATCH]: In kernel hibernation, suspend to both
Date: Wed, 09 May 2012 13:40:27 +0530 [thread overview]
Message-ID: <4FAA2673.50007@linux.vnet.ibm.com> (raw)
In-Reply-To: <1336515735.2097.23.camel@shrek.rexursive.com>
On 05/09/2012 03:52 AM, Bojan Smojver wrote:
> Hi Rafael,
>
> Here is the same thing, this time with signed off. Looks like all the
> memory used for hibernation is being released before power_down(), so I
> guess we should be good. The patch is against linux-next.
>
> ------------------------------
> Enable suspend to both for in-kernel hibernation.
>
> It is often useful to suspend to memory after hibernation image has been
> written to disk. If the battery runs out or power is otherwise lost, the
> computer will resume from the hibernated image. If not, it will resume
> from memory and hibernation image will be discarded.
>
> Signed-off-by: Bojan Smojver <bojan@rexursive.com>
> ---
> Documentation/power/swsusp.txt | 5 +++++
> kernel/power/hibernate.c | 36 ++++++++++++++++++++++++++++++++++++
> kernel/power/power.h | 3 +++
> kernel/power/swap.c | 28 ++++++++++++++++++++++++++++
> 4 files changed, 72 insertions(+), 0 deletions(-)
>
> diff --git a/Documentation/power/swsusp.txt b/Documentation/power/swsusp.txt
> index ac190cf..92341b8 100644
> --- a/Documentation/power/swsusp.txt
> +++ b/Documentation/power/swsusp.txt
> @@ -33,6 +33,11 @@ echo shutdown > /sys/power/disk; echo disk > /sys/power/state
>
> echo platform > /sys/power/disk; echo disk > /sys/power/state
>
> +. If you would like to write hibernation image to swap and then suspend
> +to RAM (provided your platform supports it), you can try
> +
> +echo suspend > /sys/power/disk; echo disk > /sys/power/state
> +
> . If you have SATA disks, you'll need recent kernels with SATA suspend
> support. For suspend and resume to work, make sure your disk drivers
> are built into kernel -- not modules. [There's way to make
> diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
> index e09dfbf..3b5726f 100644
> --- a/kernel/power/hibernate.c
> +++ b/kernel/power/hibernate.c
> @@ -5,6 +5,7 @@
> * Copyright (c) 2003 Open Source Development Lab
> * Copyright (c) 2004 Pavel Machek <pavel@ucw.cz>
> * Copyright (c) 2009 Rafael J. Wysocki, Novell Inc.
> + * Copyright (C) 2012 Bojan Smojver <bojan@rexursive.com>
> *
> * This file is released under the GPLv2.
> */
> @@ -44,6 +45,9 @@ enum {
> HIBERNATION_PLATFORM,
> HIBERNATION_SHUTDOWN,
> HIBERNATION_REBOOT,
> +#ifdef CONFIG_SUSPEND
> + HIBERNATION_SUSPEND,
> +#endif
> /* keep last */
> __HIBERNATION_AFTER_LAST
> };
> @@ -572,6 +576,10 @@ int hibernation_platform_enter(void)
> */
> static void power_down(void)
> {
> +#ifdef CONFIG_SUSPEND
> + int error;
> +#endif
> +
> switch (hibernation_mode) {
> case HIBERNATION_REBOOT:
> kernel_restart(NULL);
> @@ -581,6 +589,25 @@ static void power_down(void)
> case HIBERNATION_SHUTDOWN:
> kernel_power_off();
> break;
> +#ifdef CONFIG_SUSPEND
> + case HIBERNATION_SUSPEND:
> + error = suspend_devices_and_enter(PM_SUSPEND_MEM);
I can imagine running into a host of problems here, since the suspend
sequence is not carried out fully, from the beginning.
For example, this will skip sending out the PM_SUSPEND_PREPARE and the
PM_POST_SUSPEND notifiers. Worse, we actually send out the PM_HIBERNATION_PREPARE
and PM_POST_HIBERNATION notifiers and then do a suspend instead, underneath!
(Similar cases for the rest of the notifiers sent during suspend vs hibernation).
Don't we need to handle such things properly, in order to make suspend-to-both
work reliably?
Regards,
Srivatsa S. Bhat
> + if (error) {
> + if (hibernation_ops)
> + hibernation_mode = HIBERNATION_PLATFORM;
> + else
> + hibernation_mode = HIBERNATION_SHUTDOWN;
> + power_down();
> + }
> + /*
> + * Restore swap signature.
> + */
> + error = swsusp_unmark();
> + if (error)
> + printk(KERN_ERR "PM: Swap will be unusable! "
> + "Try swapon -a.\n");
> + return;
> +#endif
> }
> kernel_halt();
> /*
next prev parent reply other threads:[~2012-05-09 8:34 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-08 22:22 [PATCH]: In kernel hibernation, suspend to both Bojan Smojver
2012-05-09 8:10 ` Srivatsa S. Bhat [this message]
2012-05-09 10:49 ` Bojan Smojver
2012-05-09 11:11 ` Bojan Smojver
2012-05-13 23:32 ` Srivatsa S. Bhat
2012-05-14 1:02 ` Bojan Smojver
2012-05-14 2:25 ` Alan Stern
2012-05-14 2:37 ` Bojan Smojver
2012-05-14 2:46 ` Bojan Smojver
2012-05-14 2:58 ` Bojan Smojver
2012-05-14 7:45 ` Bojan Smojver
2012-05-14 11:11 ` Bojan Smojver
2012-05-14 11:47 ` Bojan Smojver
2012-05-14 23:59 ` Bojan Smojver
2012-05-15 14:26 ` Alan Stern
2012-05-15 14:35 ` Srivatsa S. Bhat
2012-05-15 17:42 ` Rafael J. Wysocki
2012-05-15 18:23 ` Srivatsa S. Bhat
2012-05-15 22:23 ` Bojan Smojver
2012-05-21 4:38 ` Bojan Smojver
2012-05-21 8:18 ` Borislav Petkov
2012-05-21 13:18 ` Rafael J. Wysocki
2012-05-21 21:43 ` Bojan Smojver
2012-05-21 21:53 ` Rafael J. Wysocki
2012-05-21 21:55 ` Bojan Smojver
2012-05-24 14:51 ` Borislav Petkov
2012-05-25 2:02 ` Bojan Smojver
2012-05-31 16:23 ` Borislav Petkov
2012-06-01 2:03 ` Bojan Smojver
2012-06-01 8:48 ` Borislav Petkov
2012-06-01 8:57 ` Bojan Smojver
2012-06-01 9:03 ` Borislav Petkov
2012-06-16 13:59 ` Rafael J. Wysocki
2012-06-16 17:39 ` Borislav Petkov
2012-06-16 19:17 ` Rafael J. Wysocki
2012-06-16 20:09 ` Bojan Smojver
2012-06-16 20:19 ` Alan Stern
2012-06-16 23:07 ` Borislav Petkov
2012-06-17 3:21 ` Bojan Smojver
2012-06-17 10:31 ` Borislav Petkov
2012-06-17 20:21 ` Rafael J. Wysocki
2012-06-18 0:33 ` Bojan Smojver
2012-06-18 12:32 ` Borislav Petkov
2012-06-18 20:29 ` Rafael J. Wysocki
2012-06-18 21:08 ` Bojan Smojver
2012-06-18 21:28 ` Rafael J. Wysocki
2012-06-19 2:09 ` Bojan Smojver
2012-06-19 14:21 ` Borislav Petkov
2012-06-19 14:32 ` Bojan Smojver
2012-06-19 20:23 ` Rafael J. Wysocki
2012-06-19 21:32 ` Bojan Smojver
2012-06-19 22:35 ` Bojan Smojver
2012-05-12 21:47 ` Rafael J. Wysocki
2012-05-13 1:37 ` Bojan Smojver
2012-05-13 13:10 ` Rafael J. Wysocki
2012-05-13 23:18 ` Bojan Smojver
2012-05-13 23:49 ` Srivatsa S. Bhat
2012-05-14 0:39 ` Bojan Smojver
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=4FAA2673.50007@linux.vnet.ibm.com \
--to=srivatsa.bhat@linux.vnet.ibm.com \
--cc=bojan@rexursive.com \
--cc=bp@alien8.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=rjw@sisk.pl \
/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.