Commit 7f4ac9f9 authored by Bob Moore's avatar Bob Moore Committed by Len Brown

ACPICA: Fix for Load/LoadTable to specify load location

Fixed a problem with the Load and LoadTable operators where
the table location within the namespace was ignored. Instead,
the table was always loaded into the root or current scope.
Signed-off-by: default avatarBob Moore <robert.moore@intel.com>
Signed-off-by: default avatarAlexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent d8841647
...@@ -368,7 +368,8 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc, ...@@ -368,7 +368,8 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
} }
status = status =
acpi_ex_add_table(table_index, acpi_gbl_root_node, &ddb_handle); acpi_ex_add_table(table_index, walk_state->scope_info->scope.node,
&ddb_handle);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
/* On error, table_ptr was deallocated above */ /* On error, table_ptr was deallocated above */
......
...@@ -107,7 +107,7 @@ acpi_ns_load_table(acpi_native_uint table_index, ...@@ -107,7 +107,7 @@ acpi_ns_load_table(acpi_native_uint table_index,
goto unlock; goto unlock;
} }
status = acpi_ns_parse_table(table_index, node->child); status = acpi_ns_parse_table(table_index, node);
if (ACPI_SUCCESS(status)) { if (ACPI_SUCCESS(status)) {
acpi_tb_set_table_loaded_flag(table_index, TRUE); acpi_tb_set_table_loaded_flag(table_index, TRUE);
} else { } else {
......
...@@ -64,7 +64,8 @@ ACPI_MODULE_NAME("nsparse") ...@@ -64,7 +64,8 @@ ACPI_MODULE_NAME("nsparse")
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_ns_one_complete_parse(acpi_native_uint pass_number, acpi_ns_one_complete_parse(acpi_native_uint pass_number,
acpi_native_uint table_index) acpi_native_uint table_index,
struct acpi_namespace_node * start_node)
{ {
union acpi_parse_object *parse_root; union acpi_parse_object *parse_root;
acpi_status status; acpi_status status;
...@@ -121,6 +122,13 @@ acpi_ns_one_complete_parse(acpi_native_uint pass_number, ...@@ -121,6 +122,13 @@ acpi_ns_one_complete_parse(acpi_native_uint pass_number,
return_ACPI_STATUS(status); return_ACPI_STATUS(status);
} }
/* start_node is the default location to load the table */
if (start_node && start_node != acpi_gbl_root_node) {
acpi_ds_scope_stack_push(start_node, ACPI_TYPE_METHOD,
walk_state);
}
/* Parse the AML */ /* Parse the AML */
ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "*PARSE* pass %d parse\n", ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "*PARSE* pass %d parse\n",
...@@ -163,7 +171,9 @@ acpi_ns_parse_table(acpi_native_uint table_index, ...@@ -163,7 +171,9 @@ acpi_ns_parse_table(acpi_native_uint table_index,
* performs another complete parse of the AML. * performs another complete parse of the AML.
*/ */
ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "**** Start pass 1\n")); ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "**** Start pass 1\n"));
status = acpi_ns_one_complete_parse(ACPI_IMODE_LOAD_PASS1, table_index); status =
acpi_ns_one_complete_parse(ACPI_IMODE_LOAD_PASS1, table_index,
start_node);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
return_ACPI_STATUS(status); return_ACPI_STATUS(status);
} }
...@@ -178,7 +188,9 @@ acpi_ns_parse_table(acpi_native_uint table_index, ...@@ -178,7 +188,9 @@ acpi_ns_parse_table(acpi_native_uint table_index,
* parse objects are all cached. * parse objects are all cached.
*/ */
ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "**** Start pass 2\n")); ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "**** Start pass 2\n"));
status = acpi_ns_one_complete_parse(ACPI_IMODE_LOAD_PASS2, table_index); status =
acpi_ns_one_complete_parse(ACPI_IMODE_LOAD_PASS2, table_index,
start_node);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
return_ACPI_STATUS(status); return_ACPI_STATUS(status);
} }
......
...@@ -113,7 +113,8 @@ acpi_ns_parse_table(acpi_native_uint table_index, ...@@ -113,7 +113,8 @@ acpi_ns_parse_table(acpi_native_uint table_index,
acpi_status acpi_status
acpi_ns_one_complete_parse(acpi_native_uint pass_number, acpi_ns_one_complete_parse(acpi_native_uint pass_number,
acpi_native_uint table_index); acpi_native_uint table_index,
struct acpi_namespace_node *start_node);
/* /*
* nsaccess - Top-level namespace access * nsaccess - Top-level namespace access
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment