[ACPI] ACPICA 20050902

Fixed a problem with the internal Owner ID allocation and
deallocation mechanisms for control method execution and
recursive method invocation.  This should eliminate the
OWNER_ID_LIMIT exceptions and "Invalid OwnerId" messages
seen on some systems.  Recursive method invocation depth
is currently limited to 255.  (Alexey Starikovskiy)

http://bugzilla.kernel.org/show_bug.cgi?id=4892

Completely eliminated all vestiges of support for the
"module-level executable code" until this support is
fully implemented and debugged.  This should eliminate the
NO_RETURN_VALUE exceptions seen during table load on some
systems that invoke this support.

http://bugzilla.kernel.org/show_bug.cgi?id=5162

Fixed a problem within the resource manager code where
the transaction flags for a 64-bit address descriptor were
handled incorrectly in the type-specific flag byte.

Consolidated duplicate code within the address descriptor
resource manager code, reducing overall subsystem code size.

Signed-off-by: Robert Moore <Robert.Moore@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
diff --git a/drivers/acpi/utilities/utmisc.c b/drivers/acpi/utilities/utmisc.c
index f027502..0c5abc5 100644
--- a/drivers/acpi/utilities/utmisc.c
+++ b/drivers/acpi/utilities/utmisc.c
@@ -67,6 +67,14 @@
 
 	ACPI_FUNCTION_TRACE("ut_allocate_owner_id");
 
+	/* Guard against multiple allocations of ID to the same location */
+
+	if (*owner_id) {
+		ACPI_REPORT_ERROR(("Owner ID [%2.2X] already exists\n",
+				   *owner_id));
+		return_ACPI_STATUS(AE_ALREADY_EXISTS);
+	}
+
 	/* Mutex for the global ID mask */
 
 	status = acpi_ut_acquire_mutex(ACPI_MTX_CACHES);
@@ -80,7 +88,8 @@
 		if (!(acpi_gbl_owner_id_mask & (1 << i))) {
 			ACPI_DEBUG_PRINT((ACPI_DB_VALUES,
 					  "Current owner_id mask: %8.8X New ID: %2.2X\n",
-					  acpi_gbl_owner_id_mask, (i + 1)));
+					  acpi_gbl_owner_id_mask,
+					  (unsigned int)(i + 1)));
 
 			acpi_gbl_owner_id_mask |= (1 << i);
 			*owner_id = (acpi_owner_id) (i + 1);
@@ -143,7 +152,9 @@
 		return_VOID;
 	}
 
-	owner_id--;		/* Normalize to zero */
+	/* Normalize the ID to zero */
+
+	owner_id--;
 
 	/* Free the owner ID only if it is valid */