ACPICA: Dispatcher: Fix a mutex issue for method auto serialization
[cascardo/linux.git] / drivers / acpi / acpica / psparse.c
index 0a23897..1ce26d9 100644 (file)
@@ -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);