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
This commit is contained in:
Jung-uk Kim 2012-03-20 20:37:23 +00:00
parent 46c57c8d2b
commit 038de96387

View File

@ -223,6 +223,7 @@ acpi_sleep_machdep(struct acpi_softc *sc, int state)
#ifdef SMP #ifdef SMP
cpuset_t wakeup_cpus; cpuset_t wakeup_cpus;
#endif #endif
register_t rf;
ACPI_STATUS status; ACPI_STATUS status;
int ret; int ret;
@ -241,8 +242,8 @@ acpi_sleep_machdep(struct acpi_softc *sc, int state)
AcpiSetFirmwareWakingVector(WAKECODE_PADDR(sc)); AcpiSetFirmwareWakingVector(WAKECODE_PADDR(sc));
rf = intr_disable();
intr_suspend(); intr_suspend();
spinlock_enter();
if (savectx(susppcbs[0])) { if (savectx(susppcbs[0])) {
ctx_fpusave(suspfpusave[0]); ctx_fpusave(suspfpusave[0]);
@ -299,8 +300,8 @@ acpi_sleep_machdep(struct acpi_softc *sc, int state)
#endif #endif
mca_resume(); mca_resume();
spinlock_exit();
intr_resume(); intr_resume();
intr_restore(rf);
AcpiSetFirmwareWakingVector(0); AcpiSetFirmwareWakingVector(0);