diff options
author | Bob Moore <robert.moore@intel.com> | 2005-11-17 13:07:00 -0500 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2005-12-10 00:27:56 -0500 |
commit | c51a4de85de720670f2fbc592a6f8040af72ad87 (patch) | |
tree | ccaa60c483fcc904abd63d936ff7dc380bf28e7b /drivers/acpi/dispatcher | |
parent | 96db255c8f014ae3497507104e8df809785a619f (diff) |
[ACPI] ACPICA 20051117
Fixed a problem in the AML parser where the method thread
count could be decremented below zero if any errors
occurred during the method parse phase. This should
eliminate AE_AML_METHOD_LIMIT exceptions seen on some
machines. This also fixed a related regression with the
mechanism that detects and corrects methods that cannot
properly handle reentrancy (related to the deployment of
the new OwnerId mechanism.)
Eliminated the pre-parsing of control methods (to detect
errors) during table load. Related to the problem above,
this was causing unwind issues if any errors occurred
during the parse, and it seemed to be overkill. A table
load should not be aborted if there are problems with
any single control method, thus rendering this feature
rather pointless.
Fixed a problem with the new table-driven resource manager
where an internal buffer overflow could occur for small
resource templates.
Implemented a new external interface, acpi_get_vendor_resource()
This interface will find and return a vendor-defined
resource descriptor within a _CRS or _PRS
method via an ACPI 3.0 UUID match. (from Bjorn Helgaas)
Removed the length limit (200) on string objects as
per the upcoming ACPI 3.0A specification. This affects
the following areas of the interpreter: 1) any implicit
conversion of a Buffer to a String, 2) a String object
result of the ASL Concatentate operator, 3) the String
object result of the ASL ToString operator.
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/dispatcher')
-rw-r--r-- | drivers/acpi/dispatcher/dsinit.c | 25 | ||||
-rw-r--r-- | drivers/acpi/dispatcher/dswload.c | 2 |
2 files changed, 17 insertions, 10 deletions
diff --git a/drivers/acpi/dispatcher/dsinit.c b/drivers/acpi/dispatcher/dsinit.c index 8693c704aea6..4fa80abfe6c0 100644 --- a/drivers/acpi/dispatcher/dsinit.c +++ b/drivers/acpi/dispatcher/dsinit.c | |||
@@ -118,14 +118,6 @@ acpi_ds_init_one_object(acpi_handle obj_handle, | |||
118 | case ACPI_TYPE_METHOD: | 118 | case ACPI_TYPE_METHOD: |
119 | 119 | ||
120 | /* | 120 | /* |
121 | * Print a dot for each method unless we are going to print | ||
122 | * the entire pathname | ||
123 | */ | ||
124 | if (!(acpi_dbg_level & ACPI_LV_INIT_NAMES)) { | ||
125 | ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT, ".")); | ||
126 | } | ||
127 | |||
128 | /* | ||
129 | * Set the execution data width (32 or 64) based upon the | 121 | * Set the execution data width (32 or 64) based upon the |
130 | * revision number of the parent ACPI table. | 122 | * revision number of the parent ACPI table. |
131 | * TBD: This is really for possible future support of integer width | 123 | * TBD: This is really for possible future support of integer width |
@@ -134,6 +126,21 @@ acpi_ds_init_one_object(acpi_handle obj_handle, | |||
134 | if (info->table_desc->pointer->revision == 1) { | 126 | if (info->table_desc->pointer->revision == 1) { |
135 | node->flags |= ANOBJ_DATA_WIDTH_32; | 127 | node->flags |= ANOBJ_DATA_WIDTH_32; |
136 | } | 128 | } |
129 | #ifdef ACPI_INIT_PARSE_METHODS | ||
130 | /* | ||
131 | * Note 11/2005: Removed this code to parse all methods during table | ||
132 | * load because it causes problems if there are any errors during the | ||
133 | * parse. Also, it seems like overkill and we probably don't want to | ||
134 | * abort a table load because of an issue with a single method. | ||
135 | */ | ||
136 | |||
137 | /* | ||
138 | * Print a dot for each method unless we are going to print | ||
139 | * the entire pathname | ||
140 | */ | ||
141 | if (!(acpi_dbg_level & ACPI_LV_INIT_NAMES)) { | ||
142 | ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT, ".")); | ||
143 | } | ||
137 | 144 | ||
138 | /* | 145 | /* |
139 | * Always parse methods to detect errors, we will delete | 146 | * Always parse methods to detect errors, we will delete |
@@ -149,7 +156,7 @@ acpi_ds_init_one_object(acpi_handle obj_handle, | |||
149 | 156 | ||
150 | /* This parse failed, but we will continue parsing more methods */ | 157 | /* This parse failed, but we will continue parsing more methods */ |
151 | } | 158 | } |
152 | 159 | #endif | |
153 | info->method_count++; | 160 | info->method_count++; |
154 | break; | 161 | break; |
155 | 162 | ||
diff --git a/drivers/acpi/dispatcher/dswload.c b/drivers/acpi/dispatcher/dswload.c index 411731261c29..89d318cbc8a3 100644 --- a/drivers/acpi/dispatcher/dswload.c +++ b/drivers/acpi/dispatcher/dswload.c | |||
@@ -311,7 +311,7 @@ acpi_ds_load1_begin_op(struct acpi_walk_state * walk_state, | |||
311 | op->named.name = node->name.integer; | 311 | op->named.name = node->name.integer; |
312 | 312 | ||
313 | #if (defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)) | 313 | #if (defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)) |
314 | op->named.path = (u8 *) path; | 314 | op->named.path = ACPI_CAST_PTR(u8, path); |
315 | #endif | 315 | #endif |
316 | 316 | ||
317 | /* | 317 | /* |