aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/dispatcher/dsmethod.c
diff options
context:
space:
mode:
authorBob Moore <robert.moore@intel.com>2008-04-10 11:06:37 -0400
committerLen Brown <len.brown@intel.com>2008-04-22 14:29:21 -0400
commitba886cd4ac957608777fbc8d137f6b9f0450e775 (patch)
treed7dabaa586af41c293977443ee20df6b6b13d171 /drivers/acpi/dispatcher/dsmethod.c
parentf654ecbfacb47d20e8cac087bbada1b947db846b (diff)
ACPICA: Update for mutiple global lock acquisitions by same thread
Allows AcpiAcquireGlobalLock external interface to be called multiple times by the same thread. Allows use of AML fields that require the global lock while the running AML is already holding the global lock. Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/dispatcher/dsmethod.c')
-rw-r--r--drivers/acpi/dispatcher/dsmethod.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/acpi/dispatcher/dsmethod.c b/drivers/acpi/dispatcher/dsmethod.c
index 1cbe61905824..c50c0cd5d717 100644
--- a/drivers/acpi/dispatcher/dsmethod.c
+++ b/drivers/acpi/dispatcher/dsmethod.c
@@ -232,9 +232,9 @@ acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node,
232 * recursive call. 232 * recursive call.
233 */ 233 */
234 if (!walk_state || 234 if (!walk_state ||
235 !obj_desc->method.mutex->mutex.owner_thread || 235 !obj_desc->method.mutex->mutex.thread_id ||
236 (walk_state->thread != 236 (walk_state->thread->thread_id !=
237 obj_desc->method.mutex->mutex.owner_thread)) { 237 obj_desc->method.mutex->mutex.thread_id)) {
238 /* 238 /*
239 * Acquire the method mutex. This releases the interpreter if we 239 * Acquire the method mutex. This releases the interpreter if we
240 * block (and reacquires it before it returns) 240 * block (and reacquires it before it returns)
@@ -254,8 +254,8 @@ acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node,
254 original_sync_level = 254 original_sync_level =
255 walk_state->thread->current_sync_level; 255 walk_state->thread->current_sync_level;
256 256
257 obj_desc->method.mutex->mutex.owner_thread = 257 obj_desc->method.mutex->mutex.thread_id =
258 walk_state->thread; 258 walk_state->thread->thread_id;
259 walk_state->thread->current_sync_level = 259 walk_state->thread->current_sync_level =
260 obj_desc->method.sync_level; 260 obj_desc->method.sync_level;
261 } else { 261 } else {
@@ -569,7 +569,7 @@ acpi_ds_terminate_control_method(union acpi_operand_object *method_desc,
569 569
570 acpi_os_release_mutex(method_desc->method.mutex->mutex. 570 acpi_os_release_mutex(method_desc->method.mutex->mutex.
571 os_mutex); 571 os_mutex);
572 method_desc->method.mutex->mutex.owner_thread = NULL; 572 method_desc->method.mutex->mutex.thread_id = 0;
573 } 573 }
574 } 574 }
575 575