cvs commit: src/sys/dev/syscons/apm apm_saver.c src/sys/i386/bios apm.c apm.h

Warner Losh imp at FreeBSD.org
Thu May 25 16:08:43 PDT 2006


imp         2006-05-25 23:06:38 UTC

  FreeBSD src repository

  Modified files:
    sys/dev/syscons/apm  apm_saver.c 
    sys/i386/bios        apm.c apm.h 
  Log:
  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
  
  Revision  Changes    Path
  1.11      +4 -0      src/sys/dev/syscons/apm/apm_saver.c
  1.146     +38 -26    src/sys/i386/bios/apm.c
  1.6       +4 -1      src/sys/i386/bios/apm.h


More information about the cvs-src mailing list