if (info->obj_desc->method.owner_id) { acpi_ut_release_owner_id(&info->obj_desc->method.owner_id); } 
acpi_status acpi_ps_execute_method(struct acpi_parameter_info *info){	acpi_status status;	ACPI_FUNCTION_TRACE("ps_execute_method");	/* Validate the Info and method Node */	if (!info || !info->node) {		return_ACPI_STATUS(AE_NULL_ENTRY);	}	/* Init for new method, wait on concurrency semaphore */	status =	    acpi_ds_begin_method_execution(info->node, info->obj_desc, NULL);	if (ACPI_FAILURE(status)) {		return_ACPI_STATUS(status);	}	/*	 * The caller "owns" the parameters, so give each one an extra	 * reference	 */	acpi_ps_update_parameter_list(info, REF_INCREMENT);	/*	 * 1) Perform the first pass parse of the method to enter any	 *    named objects that it creates into the namespace	 */	ACPI_DEBUG_PRINT((ACPI_DB_PARSE,			  "**** Begin Method Parse **** Entry=%p obj=%p\n",			  info->node, info->obj_desc));	info->pass_number = 1;	status = acpi_ps_execute_pass(info);	if (ACPI_FAILURE(status)) {		goto cleanup;	}	/*	 * 2) Execute the method. Performs second pass parse simultaneously	 */	ACPI_DEBUG_PRINT((ACPI_DB_PARSE,			  "**** Begin Method Execution **** Entry=%p obj=%p\n",			  info->node, info->obj_desc));	info->pass_number = 3;	status = acpi_ps_execute_pass(info);      cleanup:	/* Take away the extra reference that we gave the parameters above */	acpi_ps_update_parameter_list(info, REF_DECREMENT);	/* Exit now if error above */	if (ACPI_FAILURE(status)) {		return_ACPI_STATUS(status);	}	/*	 * If the method has returned an object, signal this to the caller with	 * a control exception code	 */	if (info->return_object) {		ACPI_DEBUG_PRINT((ACPI_DB_PARSE,				  "Method returned obj_desc=%p\n",				  info->return_object));		ACPI_DUMP_STACK_ENTRY(info->return_object);		status = AE_CTRL_RETURN_VALUE;	}	return_ACPI_STATUS(status);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/a94f18810f52d3a6de0a09bee0c7258b62eca262/psxface.c/buggy/drivers/acpi/parser/psxface.c