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)  			/* Either the method parse or actual execution failed */ +			acpi_ex_exit_interpreter();  			ACPI_ERROR_METHOD("Method parse/execution failed",  					  walk_state->method_node, NULL,  					  status); +			acpi_ex_enter_interpreter();  			/* Check for possible multi-thread reentrancy problem */ @@ -571,7 +573,9 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state)  		 * cleanup to do  		 */  		if (((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) == -		     ACPI_PARSE_EXECUTE) || (ACPI_FAILURE(status))) { +		     ACPI_PARSE_EXECUTE && +		     !(walk_state->parse_flags & ACPI_PARSE_MODULE_LEVEL)) || +		    (ACPI_FAILURE(status))) {  			acpi_ds_terminate_control_method(walk_state->  							 method_desc,  							 walk_state);  |