aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/dispatcher
diff options
context:
space:
mode:
authorBob Moore <robert.moore@intel.com>2005-11-17 13:07:00 -0500
committerLen Brown <len.brown@intel.com>2005-12-10 00:27:56 -0500
commitc51a4de85de720670f2fbc592a6f8040af72ad87 (patch)
treeccaa60c483fcc904abd63d936ff7dc380bf28e7b /drivers/acpi/dispatcher
parent96db255c8f014ae3497507104e8df809785a619f (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.c25
-rw-r--r--drivers/acpi/dispatcher/dswload.c2
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 /*