diff options
author | Robert Moore <Robert.Moore@intel.com> | 2005-09-02 17:24:17 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2005-09-03 00:15:11 -0400 |
commit | aff8c2777d1a9edf97f26bf60579f9c931443eb1 (patch) | |
tree | fcd5bfe84e0e3aeb328d60ec41776522b9b7d122 /drivers/acpi/utilities | |
parent | a94f18810f52d3a6de0a09bee0c7258b62eca262 (diff) |
[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>
Diffstat (limited to 'drivers/acpi/utilities')
-rw-r--r-- | drivers/acpi/utilities/utmisc.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/acpi/utilities/utmisc.c b/drivers/acpi/utilities/utmisc.c index f0275025b718..0c5abc536c7a 100644 --- a/drivers/acpi/utilities/utmisc.c +++ b/drivers/acpi/utilities/utmisc.c | |||
@@ -67,6 +67,14 @@ acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id) | |||
67 | 67 | ||
68 | ACPI_FUNCTION_TRACE("ut_allocate_owner_id"); | 68 | ACPI_FUNCTION_TRACE("ut_allocate_owner_id"); |
69 | 69 | ||
70 | /* Guard against multiple allocations of ID to the same location */ | ||
71 | |||
72 | if (*owner_id) { | ||
73 | ACPI_REPORT_ERROR(("Owner ID [%2.2X] already exists\n", | ||
74 | *owner_id)); | ||
75 | return_ACPI_STATUS(AE_ALREADY_EXISTS); | ||
76 | } | ||
77 | |||
70 | /* Mutex for the global ID mask */ | 78 | /* Mutex for the global ID mask */ |
71 | 79 | ||
72 | status = acpi_ut_acquire_mutex(ACPI_MTX_CACHES); | 80 | status = acpi_ut_acquire_mutex(ACPI_MTX_CACHES); |
@@ -80,7 +88,8 @@ acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id) | |||
80 | if (!(acpi_gbl_owner_id_mask & (1 << i))) { | 88 | if (!(acpi_gbl_owner_id_mask & (1 << i))) { |
81 | ACPI_DEBUG_PRINT((ACPI_DB_VALUES, | 89 | ACPI_DEBUG_PRINT((ACPI_DB_VALUES, |
82 | "Current owner_id mask: %8.8X New ID: %2.2X\n", | 90 | "Current owner_id mask: %8.8X New ID: %2.2X\n", |
83 | acpi_gbl_owner_id_mask, (i + 1))); | 91 | acpi_gbl_owner_id_mask, |
92 | (unsigned int)(i + 1))); | ||
84 | 93 | ||
85 | acpi_gbl_owner_id_mask |= (1 << i); | 94 | acpi_gbl_owner_id_mask |= (1 << i); |
86 | *owner_id = (acpi_owner_id) (i + 1); | 95 | *owner_id = (acpi_owner_id) (i + 1); |
@@ -143,7 +152,9 @@ void acpi_ut_release_owner_id(acpi_owner_id * owner_id_ptr) | |||
143 | return_VOID; | 152 | return_VOID; |
144 | } | 153 | } |
145 | 154 | ||
146 | owner_id--; /* Normalize to zero */ | 155 | /* Normalize the ID to zero */ |
156 | |||
157 | owner_id--; | ||
147 | 158 | ||
148 | /* Free the owner ID only if it is valid */ | 159 | /* Free the owner ID only if it is valid */ |
149 | 160 | ||