diff options
Diffstat (limited to 'drivers/acpi/acpica/psparse.c')
-rw-r--r-- | drivers/acpi/acpica/psparse.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/acpi/acpica/psparse.c b/drivers/acpi/acpica/psparse.c index 0a23897d8adf..1ce26d9f8ff6 100644 --- a/drivers/acpi/acpica/psparse.c +++ b/drivers/acpi/acpica/psparse.c | |||
@@ -537,9 +537,11 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state) | |||
537 | 537 | ||
538 | /* Either the method parse or actual execution failed */ | 538 | /* Either the method parse or actual execution failed */ |
539 | 539 | ||
540 | acpi_ex_exit_interpreter(); | ||
540 | ACPI_ERROR_METHOD("Method parse/execution failed", | 541 | ACPI_ERROR_METHOD("Method parse/execution failed", |
541 | walk_state->method_node, NULL, | 542 | walk_state->method_node, NULL, |
542 | status); | 543 | status); |
544 | acpi_ex_enter_interpreter(); | ||
543 | 545 | ||
544 | /* Check for possible multi-thread reentrancy problem */ | 546 | /* Check for possible multi-thread reentrancy problem */ |
545 | 547 | ||
@@ -571,7 +573,9 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state) | |||
571 | * cleanup to do | 573 | * cleanup to do |
572 | */ | 574 | */ |
573 | if (((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) == | 575 | if (((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) == |
574 | ACPI_PARSE_EXECUTE) || (ACPI_FAILURE(status))) { | 576 | ACPI_PARSE_EXECUTE && |
577 | !(walk_state->parse_flags & ACPI_PARSE_MODULE_LEVEL)) || | ||
578 | (ACPI_FAILURE(status))) { | ||
575 | acpi_ds_terminate_control_method(walk_state-> | 579 | acpi_ds_terminate_control_method(walk_state-> |
576 | method_desc, | 580 | method_desc, |
577 | walk_state); | 581 | walk_state); |