diff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c index 98c7f9c..3323c54 100644 --- a/drivers/acpi/acpica/evregion.c +++ b/drivers/acpi/acpica/evregion.c @@ -347,7 +347,9 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, * potentially execute control methods (for example, the _REG method * for this region) */ - acpi_ex_exit_interpreter(); + if (!(region_obj->region.node->flags & ANOBJ_TEMPORARY)) { + acpi_ex_exit_interpreter(); + } status = region_setup(region_obj, ACPI_REGION_ACTIVATE, handler_desc->address_space.context, @@ -355,7 +357,9 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, /* Re-enter the interpreter */ - acpi_ex_enter_interpreter(); + if (!(region_obj->region.node->flags & ANOBJ_TEMPORARY)) { + acpi_ex_enter_interpreter(); + } /* Check for failure of the Region Setup */ @@ -408,7 +412,9 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, * exit the interpreter because the handler *might* block -- we don't * know what it will do, so we can't hold the lock on the intepreter. */ - acpi_ex_exit_interpreter(); + if (!(region_obj->region.node->flags & ANOBJ_TEMPORARY)) { + acpi_ex_exit_interpreter(); + } } /* Call the handler */ @@ -430,7 +436,9 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, * We just returned from a non-default handler, we must re-enter the * interpreter */ - acpi_ex_enter_interpreter(); + if (!(region_obj->region.node->flags & ANOBJ_TEMPORARY)) { + acpi_ex_enter_interpreter(); + } } return_ACPI_STATUS(status);