Loading drivers/acpi/dispatcher/dsmethod.c +26 −26 Original line number Diff line number Diff line Loading @@ -235,16 +235,6 @@ acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node, acpi_ex_system_wait_semaphore(obj_desc->method.semaphore, ACPI_WAIT_FOREVER); } /* * allocate owner id for this method */ if (!obj_desc->method.thread_count) { status = acpi_ut_allocate_owner_id (&obj_desc->method.owner_id); if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); } } /* * Increment the method parse tree thread count since it has been Loading Loading @@ -299,6 +289,11 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread, return_ACPI_STATUS(AE_NULL_OBJECT); } status = acpi_ut_allocate_owner_id(&obj_desc->method.owner_id); if (ACPI_FAILURE(status)) { return_ACPI_STATUS(status); } /* Init for new method, wait on concurrency semaphore */ status = acpi_ds_begin_method_execution(method_node, obj_desc, Loading Loading @@ -385,18 +380,22 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread, if (obj_desc->method.method_flags & AML_METHOD_INTERNAL_ONLY) { status = obj_desc->method.implementation(next_walk_state); return_ACPI_STATUS(status); } goto end; return_ACPI_STATUS(AE_OK); /* On error, we must delete the new walk state */ cleanup: /* Decrement the thread count on the method parse tree */ acpi_ut_release_owner_id(&obj_desc->method.owner_id); if (next_walk_state && (next_walk_state->method_desc)) { /* Decrement the thread count on the method parse tree */ next_walk_state->method_desc->method.thread_count--; } /* On error, we must delete the new walk state */ acpi_ds_terminate_control_method (next_walk_state); (void)acpi_ds_terminate_control_method(next_walk_state); acpi_ds_delete_walk_state(next_walk_state); end: return_ACPI_STATUS(status); } Loading Loading @@ -480,7 +479,7 @@ acpi_ds_restart_control_method(struct acpi_walk_state *walk_state, * * PARAMETERS: walk_state - State of the method * * RETURN: None * RETURN: Status * * DESCRIPTION: Terminate a control method. Delete everything that the method * created, delete all locals and arguments, and delete the parse Loading @@ -488,7 +487,7 @@ acpi_ds_restart_control_method(struct acpi_walk_state *walk_state, * ******************************************************************************/ void acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state) acpi_status acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state) { union acpi_operand_object *obj_desc; struct acpi_namespace_node *method_node; Loading @@ -497,14 +496,14 @@ void acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state) ACPI_FUNCTION_TRACE_PTR("ds_terminate_control_method", walk_state); if (!walk_state) { return_VOID; return (AE_BAD_PARAMETER); } /* The current method object was saved in the walk state */ obj_desc = walk_state->method_desc; if (!obj_desc) { return_VOID; return_ACPI_STATUS(AE_OK); } /* Delete all arguments and locals */ Loading @@ -518,7 +517,7 @@ void acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state) */ status = acpi_ut_acquire_mutex(ACPI_MTX_PARSER); if (ACPI_FAILURE(status)) { return_VOID; return_ACPI_STATUS(status); } /* Signal completion of the execution of this method if necessary */ Loading Loading @@ -575,7 +574,7 @@ void acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state) */ status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE); if (ACPI_FAILURE(status)) { goto cleanup; return_ACPI_STATUS(status); } if (method_node->child) { Loading @@ -593,9 +592,10 @@ void acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state) owner_id); if (ACPI_FAILURE(status)) { goto cleanup; return_ACPI_STATUS(status); } } cleanup: acpi_ut_release_mutex (ACPI_MTX_PARSER); status = acpi_ut_release_mutex(ACPI_MTX_PARSER); return_ACPI_STATUS(status); } drivers/acpi/parser/psparse.c +15 −6 Original line number Diff line number Diff line Loading @@ -438,6 +438,7 @@ acpi_ps_next_parse_state(struct acpi_walk_state *walk_state, acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state) { acpi_status status; acpi_status terminate_status; struct acpi_thread_state *thread; struct acpi_thread_state *prev_walk_list = acpi_gbl_current_walk_list; struct acpi_walk_state *previous_walk_state; Loading Loading @@ -507,9 +508,6 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state) walk_state->method_node, NULL, status); /* Make sure that failed method will be cleaned as if it was executed */ walk_state->parse_flags |= ACPI_PARSE_EXECUTE; /* Check for possible multi-thread reentrancy problem */ if ((status == AE_ALREADY_EXISTS) && Loading @@ -526,6 +524,14 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state) } } if (walk_state->method_desc) { /* Decrement the thread count on the method parse tree */ if (walk_state->method_desc->method.thread_count) { walk_state->method_desc->method.thread_count--; } } /* We are done with this walk, move on to the parent if any */ walk_state = acpi_ds_pop_walk_state(thread); Loading @@ -540,10 +546,13 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state) */ if ((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) == ACPI_PARSE_EXECUTE) { if (walk_state->method_desc) { walk_state->method_desc->method.thread_count--; } terminate_status = acpi_ds_terminate_control_method(walk_state); if (ACPI_FAILURE(terminate_status)) { ACPI_REPORT_ERROR(("Could not terminate control method properly\n")); /* Ignore error and continue */ } } /* Delete this walk state and all linked control states */ Loading drivers/acpi/parser/psxface.c +13 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,16 @@ acpi_status acpi_ps_execute_method(struct acpi_parameter_info *info) return_ACPI_STATUS(status); } /* * Get a new owner_id for objects created by this method. Namespace * objects (such as Operation Regions) can be created during the * first pass parse. */ status = acpi_ut_allocate_owner_id(&info->obj_desc->method.owner_id); if (ACPI_FAILURE(status)) { return_ACPI_STATUS(status); } /* * The caller "owns" the parameters, so give each one an extra * reference Loading Loading @@ -129,6 +139,9 @@ acpi_status acpi_ps_execute_method(struct acpi_parameter_info *info) status = acpi_ps_execute_pass(info); cleanup: if (info->obj_desc->method.owner_id) { acpi_ut_release_owner_id(&info->obj_desc->method.owner_id); } /* Take away the extra reference that we gave the parameters above */ Loading drivers/acpi/utilities/utmisc.c +0 −2 Original line number Diff line number Diff line Loading @@ -67,8 +67,6 @@ acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id) ACPI_FUNCTION_TRACE("ut_allocate_owner_id"); WARN_ON(*owner_id); /* Mutex for the global ID mask */ status = acpi_ut_acquire_mutex(ACPI_MTX_CACHES); Loading include/acpi/acdispat.h +1 −1 Original line number Diff line number Diff line Loading @@ -194,7 +194,7 @@ acpi_status acpi_ds_restart_control_method(struct acpi_walk_state *walk_state, union acpi_operand_object *return_desc); void acpi_status acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state); acpi_status Loading Loading
drivers/acpi/dispatcher/dsmethod.c +26 −26 Original line number Diff line number Diff line Loading @@ -235,16 +235,6 @@ acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node, acpi_ex_system_wait_semaphore(obj_desc->method.semaphore, ACPI_WAIT_FOREVER); } /* * allocate owner id for this method */ if (!obj_desc->method.thread_count) { status = acpi_ut_allocate_owner_id (&obj_desc->method.owner_id); if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); } } /* * Increment the method parse tree thread count since it has been Loading Loading @@ -299,6 +289,11 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread, return_ACPI_STATUS(AE_NULL_OBJECT); } status = acpi_ut_allocate_owner_id(&obj_desc->method.owner_id); if (ACPI_FAILURE(status)) { return_ACPI_STATUS(status); } /* Init for new method, wait on concurrency semaphore */ status = acpi_ds_begin_method_execution(method_node, obj_desc, Loading Loading @@ -385,18 +380,22 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread, if (obj_desc->method.method_flags & AML_METHOD_INTERNAL_ONLY) { status = obj_desc->method.implementation(next_walk_state); return_ACPI_STATUS(status); } goto end; return_ACPI_STATUS(AE_OK); /* On error, we must delete the new walk state */ cleanup: /* Decrement the thread count on the method parse tree */ acpi_ut_release_owner_id(&obj_desc->method.owner_id); if (next_walk_state && (next_walk_state->method_desc)) { /* Decrement the thread count on the method parse tree */ next_walk_state->method_desc->method.thread_count--; } /* On error, we must delete the new walk state */ acpi_ds_terminate_control_method (next_walk_state); (void)acpi_ds_terminate_control_method(next_walk_state); acpi_ds_delete_walk_state(next_walk_state); end: return_ACPI_STATUS(status); } Loading Loading @@ -480,7 +479,7 @@ acpi_ds_restart_control_method(struct acpi_walk_state *walk_state, * * PARAMETERS: walk_state - State of the method * * RETURN: None * RETURN: Status * * DESCRIPTION: Terminate a control method. Delete everything that the method * created, delete all locals and arguments, and delete the parse Loading @@ -488,7 +487,7 @@ acpi_ds_restart_control_method(struct acpi_walk_state *walk_state, * ******************************************************************************/ void acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state) acpi_status acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state) { union acpi_operand_object *obj_desc; struct acpi_namespace_node *method_node; Loading @@ -497,14 +496,14 @@ void acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state) ACPI_FUNCTION_TRACE_PTR("ds_terminate_control_method", walk_state); if (!walk_state) { return_VOID; return (AE_BAD_PARAMETER); } /* The current method object was saved in the walk state */ obj_desc = walk_state->method_desc; if (!obj_desc) { return_VOID; return_ACPI_STATUS(AE_OK); } /* Delete all arguments and locals */ Loading @@ -518,7 +517,7 @@ void acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state) */ status = acpi_ut_acquire_mutex(ACPI_MTX_PARSER); if (ACPI_FAILURE(status)) { return_VOID; return_ACPI_STATUS(status); } /* Signal completion of the execution of this method if necessary */ Loading Loading @@ -575,7 +574,7 @@ void acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state) */ status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE); if (ACPI_FAILURE(status)) { goto cleanup; return_ACPI_STATUS(status); } if (method_node->child) { Loading @@ -593,9 +592,10 @@ void acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state) owner_id); if (ACPI_FAILURE(status)) { goto cleanup; return_ACPI_STATUS(status); } } cleanup: acpi_ut_release_mutex (ACPI_MTX_PARSER); status = acpi_ut_release_mutex(ACPI_MTX_PARSER); return_ACPI_STATUS(status); }
drivers/acpi/parser/psparse.c +15 −6 Original line number Diff line number Diff line Loading @@ -438,6 +438,7 @@ acpi_ps_next_parse_state(struct acpi_walk_state *walk_state, acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state) { acpi_status status; acpi_status terminate_status; struct acpi_thread_state *thread; struct acpi_thread_state *prev_walk_list = acpi_gbl_current_walk_list; struct acpi_walk_state *previous_walk_state; Loading Loading @@ -507,9 +508,6 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state) walk_state->method_node, NULL, status); /* Make sure that failed method will be cleaned as if it was executed */ walk_state->parse_flags |= ACPI_PARSE_EXECUTE; /* Check for possible multi-thread reentrancy problem */ if ((status == AE_ALREADY_EXISTS) && Loading @@ -526,6 +524,14 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state) } } if (walk_state->method_desc) { /* Decrement the thread count on the method parse tree */ if (walk_state->method_desc->method.thread_count) { walk_state->method_desc->method.thread_count--; } } /* We are done with this walk, move on to the parent if any */ walk_state = acpi_ds_pop_walk_state(thread); Loading @@ -540,10 +546,13 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state) */ if ((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) == ACPI_PARSE_EXECUTE) { if (walk_state->method_desc) { walk_state->method_desc->method.thread_count--; } terminate_status = acpi_ds_terminate_control_method(walk_state); if (ACPI_FAILURE(terminate_status)) { ACPI_REPORT_ERROR(("Could not terminate control method properly\n")); /* Ignore error and continue */ } } /* Delete this walk state and all linked control states */ Loading
drivers/acpi/parser/psxface.c +13 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,16 @@ acpi_status acpi_ps_execute_method(struct acpi_parameter_info *info) return_ACPI_STATUS(status); } /* * Get a new owner_id for objects created by this method. Namespace * objects (such as Operation Regions) can be created during the * first pass parse. */ status = acpi_ut_allocate_owner_id(&info->obj_desc->method.owner_id); if (ACPI_FAILURE(status)) { return_ACPI_STATUS(status); } /* * The caller "owns" the parameters, so give each one an extra * reference Loading Loading @@ -129,6 +139,9 @@ acpi_status acpi_ps_execute_method(struct acpi_parameter_info *info) status = acpi_ps_execute_pass(info); cleanup: if (info->obj_desc->method.owner_id) { acpi_ut_release_owner_id(&info->obj_desc->method.owner_id); } /* Take away the extra reference that we gave the parameters above */ Loading
drivers/acpi/utilities/utmisc.c +0 −2 Original line number Diff line number Diff line Loading @@ -67,8 +67,6 @@ acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id) ACPI_FUNCTION_TRACE("ut_allocate_owner_id"); WARN_ON(*owner_id); /* Mutex for the global ID mask */ status = acpi_ut_acquire_mutex(ACPI_MTX_CACHES); Loading
include/acpi/acdispat.h +1 −1 Original line number Diff line number Diff line Loading @@ -194,7 +194,7 @@ acpi_status acpi_ds_restart_control_method(struct acpi_walk_state *walk_state, union acpi_operand_object *return_desc); void acpi_status acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state); acpi_status Loading