Author: jkim
Date: Tue Mar 20 20:37:23 2012
New Revision: 233249
URL: http://svn.freebsd.org/changeset/base/233249

Log:
  Fix another witness panic.  We cannot enter critical section at all because
  AcpiEnterSleepState() executes (optional) _GTS method since ACPICA 20120215
  (r231844).  To evaluate the method, we need malloc(9), which may sleep.
  
  Reported by:  bschmidt
  MFC after:    3 days

Modified:
  head/sys/amd64/acpica/acpi_wakeup.c

Modified: head/sys/amd64/acpica/acpi_wakeup.c
==============================================================================
--- head/sys/amd64/acpica/acpi_wakeup.c Tue Mar 20 19:47:59 2012        
(r233248)
+++ head/sys/amd64/acpica/acpi_wakeup.c Tue Mar 20 20:37:23 2012        
(r233249)
@@ -223,6 +223,7 @@ acpi_sleep_machdep(struct acpi_softc *sc
 #ifdef SMP
        cpuset_t        wakeup_cpus;
 #endif
+       register_t      rf;
        ACPI_STATUS     status;
        int             ret;
 
@@ -241,8 +242,8 @@ acpi_sleep_machdep(struct acpi_softc *sc
 
        AcpiSetFirmwareWakingVector(WAKECODE_PADDR(sc));
 
+       rf = intr_disable();
        intr_suspend();
-       spinlock_enter();
 
        if (savectx(susppcbs[0])) {
                ctx_fpusave(suspfpusave[0]);
@@ -299,8 +300,8 @@ out:
 #endif
 
        mca_resume();
-       spinlock_exit();
        intr_resume();
+       intr_restore(rf);
 
        AcpiSetFirmwareWakingVector(0);
 
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to