acpi_ev_global_lock_thread_id = acpi_os_get_thread_id();
acpi_ev_global_lock_acquired++;
+ /*
+ * 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 acpi_acquire_global_lock interfaces. The
+ * handle is therefore updated on the first acquire from a given thread
+ * regardless of where the acquisition request originated.
+ */
+ acpi_gbl_global_lock_handle++;
+ if (acpi_gbl_global_lock_handle == 0) {
+ acpi_gbl_global_lock_handle = 1;
+ }
+
/*
* Make sure that a global lock actually exists. If not, just treat
* the lock as a standard mutex.
acpi_os_get_thread_id());
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 (acpi_gbl_global_lock_mutex->mutex.acquisition_depth == 1) {
- acpi_gbl_global_lock_handle++;
- }
- /* Return the global lock handle */
+ /* Return the global lock handle (updated in acpi_ev_acquire_global_lock) */
*handle = acpi_gbl_global_lock_handle;
}