diff options
Diffstat (limited to 'drivers/acpi/namespace')
-rw-r--r-- | drivers/acpi/namespace/nsload.c | 2 | ||||
-rw-r--r-- | drivers/acpi/namespace/nsparse.c | 18 |
2 files changed, 16 insertions, 4 deletions
diff --git a/drivers/acpi/namespace/nsload.c b/drivers/acpi/namespace/nsload.c index d4f9654fd20f..545010dfd835 100644 --- a/drivers/acpi/namespace/nsload.c +++ b/drivers/acpi/namespace/nsload.c | |||
@@ -107,7 +107,7 @@ acpi_ns_load_table(acpi_native_uint table_index, | |||
107 | goto unlock; | 107 | goto unlock; |
108 | } | 108 | } |
109 | 109 | ||
110 | status = acpi_ns_parse_table(table_index, node->child); | 110 | status = acpi_ns_parse_table(table_index, node); |
111 | if (ACPI_SUCCESS(status)) { | 111 | if (ACPI_SUCCESS(status)) { |
112 | acpi_tb_set_table_loaded_flag(table_index, TRUE); | 112 | acpi_tb_set_table_loaded_flag(table_index, TRUE); |
113 | } else { | 113 | } else { |
diff --git a/drivers/acpi/namespace/nsparse.c b/drivers/acpi/namespace/nsparse.c index e696aa847990..86bd6e5920c7 100644 --- a/drivers/acpi/namespace/nsparse.c +++ b/drivers/acpi/namespace/nsparse.c | |||
@@ -64,7 +64,8 @@ ACPI_MODULE_NAME("nsparse") | |||
64 | ******************************************************************************/ | 64 | ******************************************************************************/ |
65 | acpi_status | 65 | acpi_status |
66 | acpi_ns_one_complete_parse(acpi_native_uint pass_number, | 66 | acpi_ns_one_complete_parse(acpi_native_uint pass_number, |
67 | acpi_native_uint table_index) | 67 | acpi_native_uint table_index, |
68 | struct acpi_namespace_node * start_node) | ||
68 | { | 69 | { |
69 | union acpi_parse_object *parse_root; | 70 | union acpi_parse_object *parse_root; |
70 | acpi_status status; | 71 | acpi_status status; |
@@ -121,6 +122,13 @@ acpi_ns_one_complete_parse(acpi_native_uint pass_number, | |||
121 | return_ACPI_STATUS(status); | 122 | return_ACPI_STATUS(status); |
122 | } | 123 | } |
123 | 124 | ||
125 | /* start_node is the default location to load the table */ | ||
126 | |||
127 | if (start_node && start_node != acpi_gbl_root_node) { | ||
128 | acpi_ds_scope_stack_push(start_node, ACPI_TYPE_METHOD, | ||
129 | walk_state); | ||
130 | } | ||
131 | |||
124 | /* Parse the AML */ | 132 | /* Parse the AML */ |
125 | 133 | ||
126 | ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "*PARSE* pass %d parse\n", | 134 | 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 | * performs another complete parse of the AML. | 171 | * performs another complete parse of the AML. |
164 | */ | 172 | */ |
165 | ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "**** Start pass 1\n")); | 173 | ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "**** Start pass 1\n")); |
166 | status = acpi_ns_one_complete_parse(ACPI_IMODE_LOAD_PASS1, table_index); | 174 | status = |
175 | acpi_ns_one_complete_parse(ACPI_IMODE_LOAD_PASS1, table_index, | ||
176 | start_node); | ||
167 | if (ACPI_FAILURE(status)) { | 177 | if (ACPI_FAILURE(status)) { |
168 | return_ACPI_STATUS(status); | 178 | return_ACPI_STATUS(status); |
169 | } | 179 | } |
@@ -178,7 +188,9 @@ acpi_ns_parse_table(acpi_native_uint table_index, | |||
178 | * parse objects are all cached. | 188 | * parse objects are all cached. |
179 | */ | 189 | */ |
180 | ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "**** Start pass 2\n")); | 190 | ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "**** Start pass 2\n")); |
181 | status = acpi_ns_one_complete_parse(ACPI_IMODE_LOAD_PASS2, table_index); | 191 | status = |
192 | acpi_ns_one_complete_parse(ACPI_IMODE_LOAD_PASS2, table_index, | ||
193 | start_node); | ||
182 | if (ACPI_FAILURE(status)) { | 194 | if (ACPI_FAILURE(status)) { |
183 | return_ACPI_STATUS(status); | 195 | return_ACPI_STATUS(status); |
184 | } | 196 | } |