summaryrefslogtreecommitdiff
path: root/source/components/dispatcher
diff options
context:
space:
mode:
Diffstat (limited to 'source/components/dispatcher')
-rw-r--r--source/components/dispatcher/dsmethod.c14
-rw-r--r--source/components/dispatcher/dswexec.c3
-rw-r--r--source/components/dispatcher/dswload2.c8
3 files changed, 16 insertions, 9 deletions
diff --git a/source/components/dispatcher/dsmethod.c b/source/components/dispatcher/dsmethod.c
index 334dadcac664..4c4ff2270127 100644
--- a/source/components/dispatcher/dsmethod.c
+++ b/source/components/dispatcher/dsmethod.c
@@ -107,12 +107,15 @@ AcpiDsAutoSerializeMethod (
"Method auto-serialization parse [%4.4s] %p\n",
AcpiUtGetNodeName (Node), Node));
+ AcpiExEnterInterpreter ();
+
/* Create/Init a root op for the method parse tree */
Op = AcpiPsAllocOp (AML_METHOD_OP, ObjDesc->Method.AmlStart);
if (!Op)
{
- return_ACPI_STATUS (AE_NO_MEMORY);
+ Status = AE_NO_MEMORY;
+ goto Unlock;
}
AcpiPsSetName (Op, Node->Name.Integer);
@@ -124,7 +127,8 @@ AcpiDsAutoSerializeMethod (
if (!WalkState)
{
AcpiPsFreeOp (Op);
- return_ACPI_STATUS (AE_NO_MEMORY);
+ Status = AE_NO_MEMORY;
+ goto Unlock;
}
Status = AcpiDsInitAmlWalk (WalkState, Op, Node,
@@ -143,6 +147,8 @@ AcpiDsAutoSerializeMethod (
Status = AcpiPsParseAml (WalkState);
AcpiPsDeleteParseTree (Op);
+Unlock:
+ AcpiExExitInterpreter ();
return_ACPI_STATUS (Status);
}
@@ -810,7 +816,9 @@ AcpiDsTerminateControlMethod (
{
/* Delete any direct children of (created by) this method */
+ (void) AcpiExExitInterpreter ();
AcpiNsDeleteNamespaceSubtree (WalkState->MethodNode);
+ (void) AcpiExEnterInterpreter ();
/*
* Delete any objects that were created by this method
@@ -821,7 +829,9 @@ AcpiDsTerminateControlMethod (
*/
if (MethodDesc->Method.InfoFlags & ACPI_METHOD_MODIFIED_NAMESPACE)
{
+ (void) AcpiExExitInterpreter ();
AcpiNsDeleteNamespaceByOwner (MethodDesc->Method.OwnerId);
+ (void) AcpiExEnterInterpreter ();
MethodDesc->Method.InfoFlags &=
~ACPI_METHOD_MODIFIED_NAMESPACE;
}
diff --git a/source/components/dispatcher/dswexec.c b/source/components/dispatcher/dswexec.c
index 307af607a843..e284fca5d957 100644
--- a/source/components/dispatcher/dswexec.c
+++ b/source/components/dispatcher/dswexec.c
@@ -144,7 +144,8 @@ AcpiDsGetPredicateValue (
* Result of predicate evaluation must be an Integer
* object. Implicitly convert the argument if necessary.
*/
- Status = AcpiExConvertToInteger (ObjDesc, &LocalObjDesc, 16);
+ Status = AcpiExConvertToInteger (ObjDesc, &LocalObjDesc,
+ ACPI_STRTOUL_BASE16);
if (ACPI_FAILURE (Status))
{
goto Cleanup;
diff --git a/source/components/dispatcher/dswload2.c b/source/components/dispatcher/dswload2.c
index 2c099ef0f035..ae076e2587ca 100644
--- a/source/components/dispatcher/dswload2.c
+++ b/source/components/dispatcher/dswload2.c
@@ -624,16 +624,12 @@ AcpiDsLoad2EndOp (
{
return_ACPI_STATUS (Status);
}
-
- AcpiExExitInterpreter ();
}
+ AcpiExExitInterpreter ();
Status = AcpiEvInitializeRegion (
AcpiNsGetAttachedObject (Node), FALSE);
- if (WalkState->MethodNode)
- {
- AcpiExEnterInterpreter ();
- }
+ AcpiExEnterInterpreter ();
if (ACPI_FAILURE (Status))
{