Enforce ACPI timer as the timecounter hardware before we change sleep state

unless it is the current timer.  When we have resumed successfully, restore
the previous timecounter hardware if it was changed earlier.  Only the ACPI
timer is guaranteed to increase monotonically between S-state changes.
This commit is contained in:
jkim 2010-08-13 20:43:19 +00:00
parent d713120364
commit 0622ee44e5
2 changed files with 18 additions and 0 deletions

View File

@ -43,6 +43,12 @@ if [ -r /var/run/rc.suspend.pid ]; then
echo 'rc.resume: killed rc.suspend that was still around'
fi
if [ -r /var/run/rc.suspend.tch ]; then
_t=`cat /var/run/rc.suspend.tch`
/sbin/sysctl -n kern.timecounter.hardware=$_t > /dev/null 2>&1
/bin/rm -f /var/run/rc.suspend.tch
fi
# Turns on a power supply of a card in the slot inactivated.
# See also contrib/pccardq.c (only for PAO users).
# pccardq | awk -F '~' '$5 == "inactive" \

View File

@ -43,6 +43,18 @@ fi
echo $$ 2> /dev/null > /var/run/rc.suspend.pid
_t=`/sbin/sysctl -n kern.timecounter.hardware 2> /dev/null`
case ${_t#ACPI-} in
fast|safe)
/bin/rm -f /var/run/rc.suspend.tch
;;
*)
( /sbin/sysctl -n kern.timecounter.hardware=ACPI-fast || \
/sbin/sysctl -n kern.timecounter.hardware=ACPI-safe ) \
> /dev/null 2>&1 && echo $_t > /var/run/rc.suspend.tch
;;
esac
# If you have troubles on suspending with PC-CARD modem, try this.
# See also contrib/pccardq.c (Only for PAO users).
# pccardq | awk -F '~' '$5 == "filled" && $4 ~ /uart/ \