Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 20 Mar 2012 20:37:23 +0000 (UTC)
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r233249 - head/sys/amd64/acpica
Message-ID:  <201203202037.q2KKbNfK037014@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201203202037.q2KKbNfK037014>