Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
DISCONTINUED:openSUSE:11.1
pm-utils
pm-utils-0.99.4-uswsusp-support.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File pm-utils-0.99.4-uswsusp-support.diff of Package pm-utils
Index: b/pm/functions =================================================================== --- a/pm/functions +++ b/pm/functions @@ -12,10 +12,12 @@ export PATH=/sbin:/usr/sbin:/bin:/usr/bi set -a HIBERNATE_RESUME_POST_VIDEO=no INHIBIT=/var/run/pm-utils.inhibit PM_LOGFILE=${PM_LOGFILE:=/var/log/pm-suspend.log} SUSPEND_MODULES="" +HIBERNATE_METHOD="" +S2DISK_CONF="/etc/suspend.conf" TEMPORARY_CPUFREQ_GOVERNOR="userspace" [ -f /usr/lib/pm-utils/defaults ] && . /usr/lib/pm-utils/defaults set +a @@ -73,35 +75,36 @@ find_sleepd_files() done } run_hooks() { + # $1=suspend/suspend_hybrid/hibernate $2=suspend/hibernate/thaw/resume $3=reverse/"" [ -z "$1" ] && return 0 [ -f /var/run/pm-suspend ] && . /var/run/pm-suspend rm -f /var/run/pm-suspend - echo "$(date): running $1 hooks." + echo "$(date): running '$1'/'$2'/'$3' hooks." files=$(find_sleepd_files) - if [ "$2" = "reverse" ]; then + if [ "$3" = "reverse" ]; then filea=($files) filen=${#filea[*]} while [ "$filen" -gt 0 ]; do let filen-- file="${filea[$filen]}" echo "===== $(date): running hook: $file =====" - $file $1 + $file $2 $1 done else for file in $files ; do echo "===== $(date): running hook: $file =====" - $file $1 + $file $2 $1 done fi - echo "$(date): done running $1 hooks." + echo "$(date): done running $1/$2 hooks." } get_power_status() { RETVAL=0 @@ -119,47 +122,183 @@ get_power_status() ;; esac return $RETVAL } +get_s2ram_cmdline() +{ + local ACPI_FLAG UNHANDLED + let ACPI_FLAG=0 + if [ -n "$QUIRK_NONE" ]; then + echo "INFO: HAL quirks state no quirk is neeed." + return; + fi + [ -n "$QUIRK_S3_BIOS" ] && ACPI_FLAG=1 + [ -n "$QUIRK_S3_MODE" ] && let ACPI_FLAG+=2 + [ $ACPI_FLAG -ne 0 ] && S2RAM_OPTS+="--acpi_sleep $ACPI_FLAG " + [ -n "$QUIRK_VBE_POST" ] && S2RAM_OPTS+="--vbe_post " + [ -n "$QUIRK_VBEMODE_RESTORE" ] && S2RAM_OPTS+="--vbe_mode " + [ -n "$QUIRK_VBESTATE_RESTORE" ] && S2RAM_OPTS+="--vbe_save " + [ -n "$QUIRK_RADEON_OFF" ] && S2RAM_OPTS+="--radeontool " + # the unhandled quirks... + [ -n "$QUIRK_DPMS_ON" ] && UNHANDLED+="QUIRK_DPMS_ON " + [ -n "$QUIRK_DPMS_SUSPEND" ] && UNHANDLED+="QUIRK_DPMS_SUSPEND " + [ -n "$QUIRK_RESET_BRIGHTNESS" ] && UNHANDLED+="QUIRK_RESET_BRIGHTNESS " + [ -n "$QUIRK_VGA_MODE_3" ] && UNHANDLED+="QUIRK_VGA_MODE_3 " + if [ -n "$UNHANDLED" ]; then + echo "INFO: those quirks are not handled yet: $UNHANDLED" + fi + echo "INFO: S2RAM_OPTS from HAL quirks: '$S2RAM_OPTS'." +} + +# this function tries to assemble the best s2ram options from various sources, falling back +# to other methods... +get_s2ram_opts() +{ + # if S2RAM_OPTS is set - then use it. The user told us so. Obey his wish. + if [ -n "$S2RAM_OPTS" ]; then + echo "INFO: using user-supplied options: S2RAM_OPTS='$S2RAM_OPTS' for suspending." + return + fi + + # The user did not tell us the options, so let's check if he expressed a preference for + # quirks passed by HAL via the command line... + if [ "$S2RAM_QUIRKS_SOURCE" = "hal" ]; then + # use the quirks from HAL + S2RAM_OPTS="--force" + get_s2ram_cmdline + return + fi + + # ...or if he prefers the s2ram built in list... + if [ "$S2RAM_QUIRKS_SOURCE" = "s2ram" ]; then + if /usr/sbin/s2ram -n >/dev/null; then + echo "INFO: using s2ram built-in database, machine is supported." + return + else + echo "WARN: S2RAM_QUIRKS_SOURCE=s2ram, but machine is unknown, continuing..." + fi + fi + + # still nothing. So let's try to be smart. + # first check if a "good" kernel module is loaded. + for MODULE in i915 fglrx nvidia; do + if [ -d /sys/module/$MODULE ]; then + echo "INFO: module $MODULE is loaded, trusting it to restore video after resume." + S2RAM_OPTS="--force" + return + fi + done + + # now we check if s2ram knows the machine. + if /usr/sbin/s2ram -n >/dev/null; then + echo "INFO: machine is in s2ram database, using it." + return; + fi + + # s2ram does not know the machine, ask HAL... + echo "INFO: no quirks found, using info passed by HAL." + get_s2ram_cmdline + if [ -n "$S2RAM_OPTS" ]; then + S2RAM_OPTS+="--force " + fi + + # if we came here and S2RAM_OPTS is empty, suspend won't work :-( +} + do_suspend() { - pm-pmu --suspend || echo -n "mem" > /sys/power/state + local RET + echo "INFO: going to suspend. In case of problems with the selected suspend options," + echo "INFO: please read /usr/share/doc/packages/pm-utils/README.smart-suspend-to-RAM" + get_s2ram_opts + if [ -x /usr/sbin/s2ram ]; then + set -x + /usr/sbin/s2ram $S2RAM_OPTS + RET=$? + set +x + else + pm-pmu --suspend || echo -n "mem" > /sys/power/state + RET=$? + fi + return $RET } do_hibernate() { - echo -n "platform" > /sys/power/disk - echo -n "disk" > /sys/power/state + local RET=1 + if [ -z "$HIBERNATE_METHOD" ]; then + if [ -x /usr/sbin/s2disk -a -c /dev/snapshot ]; then + HIBERNATE_METHOD="userspace" + else + HIBERNATE_METHOD="kernel" + fi + fi + case $HIBERNATE_METHOD in + userspace) + set -x + /usr/sbin/s2disk --config $S2DISK_CONF + RET=$? + set +x + ;; + kernel) + echo -n "platform" > /sys/power/disk + echo -n "disk" > /sys/power/state + RET=$? + ;; + esac + return $RET } do_suspend_hybrid() { - return 1 + local RET=1 + if [ -z "$HIBERNATE_METHOD" ]; then + if [ -x /usr/sbin/s2both -a -c /dev/snapshot ]; then + HIBERNATE_METHOD="userspace" + else + HIBERNATE_METHOD="kernel" + fi + fi + case $HIBERNATE_METHOD in + userspace) + get_s2ram_opts + set -x + /usr/sbin/s2both --config $S2DISK_CONF + RET=$? + set +x + ;; + *) + RET=1 + ;; + esac + return $RET } pm_main() { + local RET=1 if [ -n "$PM_LOGFILE" ]; then exec > "$PM_LOGFILE" 2>&1 fi take_suspend_lock || exit 1 rm -f "$INHIBIT" - run_hooks "$1" + run_hooks "$1" "$2" if [ ! -e "$INHIBIT" -a "$(type -t "do_$1")" == "function" ]; then sync ; sync ; sync "do_$1" + RET=$? fi - run_hooks "$2" reverse + run_hooks "$1" "$3" reverse remove_suspend_lock 200 - return 0 + return $RET } _rmmod() { if modprobe -r $1; then echo "export RESUME_MODULES=\"$1 \$RESUME_MODULES\"" \ Index: b/src/pm-is-supported =================================================================== --- a/src/pm-is-supported +++ b/src/pm-is-supported @@ -34,13 +34,13 @@ case "$ARG" in hibernate) [ -f /sys/power/disk ] || exit 1 grep -q disk /sys/power/state || exit 1 ;; suspend-hybrid) - # grep -q mem /sys/power/state || exit 1 - # grep -q disk /sys/power/state || exit 1 - exit 1 + grep -q mem /sys/power/state || exit 1 + grep -q disk /sys/power/state || exit 1 + [ -x /usr/sbin/s2both -a -c /dev/snapshot ] || exit 1 ;; help) help_options ;; *) Index: b/src/pm-action =================================================================== --- a/src/pm-action +++ b/src/pm-action @@ -97,10 +97,11 @@ set +a ACTION=$(basename "$0") ACTION=${ACTION#pm-} ACTION=${ACTION/-/_} +METHOD=$ACTION case "$ACTION" in suspend) if ! grep -q mem /sys/power/state ; then echo "Error: kernel cannot suspend to ram." 1>&2 @@ -112,15 +113,23 @@ case "$ACTION" in echo "Error: kernel cannot suspend to disk." 1>&2 exit 1 fi REVERSE=thaw ;; + suspend_hybrid) + if ! pm-is-supported --suspend-hybrid; then + echo "Error: system cannot do hybrid suspend." 1>&2 + exit 1 + fi + ACTION=suspend + REVERSE=resume + ;; *) exit 1 ;; esac export PM_CMDLINE="$@" -pm_main "$ACTION" "$REVERSE" +pm_main "$METHOD" "$ACTION" "$REVERSE" exit $?
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor