patch-2.4.26 linux-2.4.26/drivers/acpi/executer/exmutex.c
Next file: linux-2.4.26/drivers/acpi/executer/exoparg2.c
Previous file: linux-2.4.26/drivers/acpi/executer/exmisc.c
Back to the patch index
Back to the overall index
- Lines: 43
- Date:
2004-04-14 06:05:28.000000000 -0700
- Orig file:
linux-2.4.25/drivers/acpi/executer/exmutex.c
- Orig date:
2004-02-18 05:36:31.000000000 -0800
diff -urN linux-2.4.25/drivers/acpi/executer/exmutex.c linux-2.4.26/drivers/acpi/executer/exmutex.c
@@ -176,15 +176,18 @@
/*
* Support for multiple acquires by the owning thread
*/
+ if (obj_desc->mutex.owner_thread) {
+ /* Special case for Global Lock, allow all threads */
- if ((obj_desc->mutex.owner_thread) &&
- (obj_desc->mutex.owner_thread->thread_id == walk_state->thread->thread_id)) {
- /*
- * The mutex is already owned by this thread,
- * just increment the acquisition depth
- */
- obj_desc->mutex.acquisition_depth++;
- return_ACPI_STATUS (AE_OK);
+ if ((obj_desc->mutex.owner_thread->thread_id == walk_state->thread->thread_id) ||
+ (obj_desc->mutex.semaphore == acpi_gbl_global_lock_semaphore)) {
+ /*
+ * The mutex is already owned by this thread,
+ * just increment the acquisition depth
+ */
+ obj_desc->mutex.acquisition_depth++;
+ return_ACPI_STATUS (AE_OK);
+ }
}
/* Acquire the mutex, wait if necessary */
@@ -254,9 +257,12 @@
return_ACPI_STATUS (AE_AML_INTERNAL);
}
- /* The Mutex is owned, but this thread must be the owner */
-
- if (obj_desc->mutex.owner_thread->thread_id != walk_state->thread->thread_id) {
+ /*
+ * The Mutex is owned, but this thread must be the owner.
+ * Special case for Global Lock, any thread can release
+ */
+ if ((obj_desc->mutex.owner_thread->thread_id != walk_state->thread->thread_id) &&
+ (obj_desc->mutex.semaphore != acpi_gbl_global_lock_semaphore)) {
ACPI_REPORT_ERROR ((
"Thread %X cannot release Mutex [%4.4s] acquired by thread %X\n",
walk_state->thread->thread_id,
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)