aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/syscons/apm
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2006-05-25 23:06:38 +0000
committerWarner Losh <imp@FreeBSD.org>2006-05-25 23:06:38 +0000
commitd708737568327b8f50113babcbf42416bce99483 (patch)
treedbe6bdba11b11a99072e0832f91f2ddc1766df6f /sys/dev/syscons/apm
parenta856bed399f8190951511f06e83890dfaed4c2b3 (diff)
APM was calling the suspend process from a timeout. This meant that
other timeouts could not happen while suspending, including timeouts for things like msleep. This caused the system to hang on suspend when the cbb was enabled, since its suspend path powered down the socket which used a timeout to wait for it to be done. APM now creates a thread when it is enabled, and deletes the thread when it is disabled. This thread takes the place of the timeout by doing its polling every ~.9s. When the thread is disabled, it will wakeup early, otherwise it times out and polls the varius things the old timeout polled (APM events, suspend delays, etc). This makes my Sony VAIO 505TS suspend/resume correctly when APM is enabled (ACPI is black listed on my 505TS). This will likely fix other problems with the suspend path where drivers would sleep with msleep and/or do other timeouts. Maybe there's some special case code that would use DELAY while suspending and msleep otherwise that can be revisited and removed. This was also tested by glebius@, who pointed out that in the patch I sent him, I'd forgotten apm_saver.c MFC After: 3 weeks
Notes
svn path=/head/; revision=158922
Diffstat (limited to 'sys/dev/syscons/apm')
-rw-r--r--sys/dev/syscons/apm/apm_saver.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/dev/syscons/apm/apm_saver.c b/sys/dev/syscons/apm/apm_saver.c
index cdd5969c9806..567b452e0b2e 100644
--- a/sys/dev/syscons/apm/apm_saver.c
+++ b/sys/dev/syscons/apm/apm_saver.c
@@ -30,8 +30,12 @@
#include <sys/param.h>
#include <sys/systm.h>
+#include <sys/condvar.h>
#include <sys/kernel.h>
+#include <sys/kthread.h>
+#include <sys/lock.h>
#include <sys/module.h>
+#include <sys/mutex.h>
#include <sys/consio.h>
#include <sys/fbio.h>