diff options
author | Jung-uk Kim <jkim@FreeBSD.org> | 2012-03-20 20:37:23 +0000 |
---|---|---|
committer | Jung-uk Kim <jkim@FreeBSD.org> | 2012-03-20 20:37:23 +0000 |
commit | 038de96387a0017d58adf371bcb9cf38967a0a5d (patch) | |
tree | 7f1c4a7d43de6aad4175caaa71a4afda27e1aaaa /sys/amd64/acpica | |
parent | 46c57c8d2b63867e4aadcdae1095c34d06b25f96 (diff) | |
download | src-038de96387a0017d58adf371bcb9cf38967a0a5d.tar.gz src-038de96387a0017d58adf371bcb9cf38967a0a5d.zip |
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
Notes
Notes:
svn path=/head/; revision=233249
Diffstat (limited to 'sys/amd64/acpica')
-rw-r--r-- | sys/amd64/acpica/acpi_wakeup.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/sys/amd64/acpica/acpi_wakeup.c b/sys/amd64/acpica/acpi_wakeup.c index 44ed98070714..9af035cee1cd 100644 --- a/sys/amd64/acpica/acpi_wakeup.c +++ b/sys/amd64/acpica/acpi_wakeup.c @@ -223,6 +223,7 @@ acpi_sleep_machdep(struct acpi_softc *sc, int state) #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, int state) 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); |