[Pm-utils] Some thoughts about some of the hooks
Stefan Seyfried
seife at suse.de
Fri Oct 6 02:39:13 PDT 2006
On Fri, Oct 06, 2006 at 10:01:19AM +0200, Tim Dijkstra wrote:
> On Fri, 6 Oct 2006 07:56:11 +0200
> Stefan Seyfried <seife at suse.de> wrote:
>
> > Ok. I am going to try to move all our powersaved scripts to pm-utils,
> > and making it work with uswsusp (which is our default now) would have
> > been one of the tasks anyway :-)
>
> Very good. Takes something from my todo list;)
how about this:
Index: functions
===================================================================
RCS file: /cvs/pm-utils/pm-utils/pm/functions,v
retrieving revision 1.20
diff -u -p -r1.20 functions
--- functions 28 Sep 2006 21:25:36 -0000 1.20
+++ functions 6 Oct 2006 09:27:49 -0000
@@ -96,14 +102,32 @@ pm_main()
run_hooks "$1"
sync ; sync ; sync
+ [ -e /etc/pm/config.d/$1 ] && . /etc/pm/config.d/$1
+
case "$1" in
suspend)
pm-pmu --suspend || echo -n "mem" > /sys/power/state
run_hooks resume reverse
;;
hibernate)
- echo -n "platform" > /sys/power/disk
- echo -n "disk" > /sys/power/state
+ if [ -z "$HIBERNATE" ]; then
+ if [ -x /usr/sbin/s2disk -a -c /dev/snapshot ]; then
+ HIBERNATE="userspace"
+ else
+ HIBERNATE="kernel"
+ fi
+ fi
+ if checkhibernate; then
+ case $HIBERNATE in
+ userspace)
+ /usr/sbin/s2disk -f /var/lib/s2disk.conf
+ ;;
+ kernel)
+ echo -n "platform" > /sys/power/disk
+ echo -n "disk" > /sys/power/state
+ ;;
+ esac
+ fi
run_hooks thaw reverse
;;
esac
@@ -155,3 +213,52 @@ restorestate()
{
eval echo \$${1}_STATE
}
+
+# sanity check the environment if resume will be possible after hibernate
+checkhibernate()
+{
+ if [ "$HIBERNATE" = "kernel" ]; then
+ read RDEV < /sys/power/resume
+ if [ "$RDEV" = "0:0" ]; then
+ # DEBUG "no resume partition set"
+ # maybe "resume=..." was given, but initrd did not set up
+ # /sys/power/resume correctly.
+ return 1
+ fi
+ if [ -n "$IMAGE_SIZE" -a -w /sys/power/image_size ]; then
+ echo "$IMAGE_SIZE" > /sys/power/image_size 2>/dev/null
+ fi
+ fi
+ RDEV=""
+ read CMDLINE < /proc/cmdline
+ for CMD in $CMDLINE; do
+ case $CMD in
+ resume=*) RDEV=${CMD#*=}
+ break ;;
+ esac
+ done
+ if [ -z "$RDEV" ]; then
+ # DEBUG "no resume parameter"
+ return 1
+ fi
+ while read SDEV STYPE DUMMY; do
+ [ "$STYPE" != "partition" ] && continue
+ [ "$SDEV" = "$RDEV" ] && break
+ SDEV=""
+ done < /proc/swaps
+ if [ -z "$SDEV" ]; then
+ # DEBUG "resume partition '$RDEV' not swapon'ed"
+ return 1
+ fi
+ if [ "$HIBERNATE" = "userspace" ]; then
+ rm -f /var/lib/s2disk.conf
+ echo "resume device = $RDEV" >> /var/lib/s2disk.conf
+ if [ -n "$IMAGE_SIZE" ]; then
+ echo "image size = $IMAGE_SIZE" >> /var/lib/s2disk.conf
+ # add the parameters from /etc/suspend.conf to /var/lib/s2disk.conf
+ if [ -e /etc/suspend.conf ]; then
+ sed '/^[[:space:]]*\(#\|$\)/d;' /etc/suspend.conf >> /var/lib/s2disk.conf
+ fi
+ fi
+ return 0
+}
This is basically how i did it until now in powersaved.
Precondition:
- your initrd does invoke resume with the device from "resume=". I think it
is a good idea to use the well known resume parameter also for userspace
suspend. Generally, the user should not need to care about which method he
uses.
Right now i do not even copy /etc/suspend.conf into the initrd anymore
since it is not needed for resume.
Then i generate a temporary suspend config file in /var/lib/s2disk.conf from
the resume= parameter (read from /proc/cmdline) and from IMAGE_SIZE (which
might be set in /etc/pm/config.d/hibernate or calculated intelligently from
the free swap space and the total amount of system memory, this is not yet
in this patch).
I append any options from /etc/suspend.conf to this temporary config file.
Since s2disk just takes the latest incarnation of an option, the settings
from /etc/suspend.conf override our automatic determined setting.
I ship an empty (all options commented out) config file, and it just works
out of the box, if the resume= parameter is correctly set (done by the
installer).
What do you think about that?
--
Stefan Seyfried
QA / R&D Team Mobile Devices | "Any ideas, John?"
SUSE LINUX Products GmbH, Nürnberg | "Well, surrounding them's out."
More information about the Pm-utils
mailing list