summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/contrib/dev/acpica/evmisc.c14
-rw-r--r--sys/contrib/dev/acpica/evxface.c11
2 files changed, 15 insertions, 10 deletions
diff --git a/sys/contrib/dev/acpica/evmisc.c b/sys/contrib/dev/acpica/evmisc.c
index 881519f..7000543 100644
--- a/sys/contrib/dev/acpica/evmisc.c
+++ b/sys/contrib/dev/acpica/evmisc.c
@@ -568,6 +568,20 @@ AcpiEvAcquireGlobalLock (
}
/*
+ * Update the global lock handle and check for wraparound. The handle is
+ * only used for the external global lock interfaces, but it is updated
+ * here to properly handle the case where a single thread may acquire the
+ * lock via both the AML and the AcpiAcquireGlobalLock interfaces. The
+ * handle is therefore updated on the first acquire from a given thread
+ * regardless of where the acquisition request originated.
+ */
+ AcpiGbl_GlobalLockHandle++;
+ if (AcpiGbl_GlobalLockHandle == 0)
+ {
+ AcpiGbl_GlobalLockHandle = 1;
+ }
+
+ /*
* Make sure that a global lock actually exists. If not, just treat
* the lock as a standard mutex.
*/
diff --git a/sys/contrib/dev/acpica/evxface.c b/sys/contrib/dev/acpica/evxface.c
index 021ebf7..15fbc9c 100644
--- a/sys/contrib/dev/acpica/evxface.c
+++ b/sys/contrib/dev/acpica/evxface.c
@@ -921,16 +921,7 @@ AcpiAcquireGlobalLock (
if (ACPI_SUCCESS (Status))
{
- /*
- * If this was the first acquisition of the Global Lock by this thread,
- * create a new handle. Otherwise, return the existing handle.
- */
- if (AcpiGbl_GlobalLockMutex->Mutex.AcquisitionDepth == 1)
- {
- AcpiGbl_GlobalLockHandle++;
- }
-
- /* Return the global lock handle */
+ /* Return the global lock handle (updated in AcpiEvAcquireGlobalLock) */
*Handle = AcpiGbl_GlobalLockHandle;
}
OpenPOWER on IntegriCloud