/* * 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); } }  
acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node,			       union acpi_operand_object *obj_desc,			       struct acpi_namespace_node *calling_method_node){	acpi_status status = AE_OK;	ACPI_FUNCTION_TRACE_PTR("ds_begin_method_execution", method_node);	if (!method_node) {		return_ACPI_STATUS(AE_NULL_ENTRY);	}	/*	 * If there is a concurrency limit on this method, we need to	 * obtain a unit from the method semaphore.	 */	if (obj_desc->method.semaphore) {		/*		 * Allow recursive method calls, up to the reentrancy/concurrency		 * limit imposed by the SERIALIZED rule and the sync_level method		 * parameter.		 *		 * The point of this code is to avoid permanently blocking a		 * thread that is making recursive method calls.		 */		if (method_node == calling_method_node) {			if (obj_desc->method.thread_count >=			    obj_desc->method.concurrency) {				return_ACPI_STATUS(AE_AML_METHOD_LIMIT);			}		}		/*		 * Get a unit from the method semaphore. This releases the		 * interpreter if we block		 */		status =		    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	 * reentered one more time (even if it is the same thread)	 */	obj_desc->method.thread_count++;	return_ACPI_STATUS(status);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/a94f18810f52d3a6de0a09bee0c7258b62eca262/dsmethod.c/buggy/drivers/acpi/dispatcher/dsmethod.c