summaryrefslogtreecommitdiff
path: root/drivers/acpi/acpica/dsmethod.c
diff options
context:
space:
mode:
authorLen Brown <len.brown@intel.com>2010-08-15 04:25:40 (GMT)
committerLen Brown <len.brown@intel.com>2010-08-15 04:25:40 (GMT)
commitc172cb73bc79fe69915b1a1a48e374aa4b1f8a59 (patch)
treeeb3d6415914968441c063f7282e824b14b5a5edb /drivers/acpi/acpica/dsmethod.c
parente8eb6228094bcf0c84d9aa32b6363e78da68e1f5 (diff)
parent28f4f8a9def2b1f3a6066bae791c77043ec49524 (diff)
downloadlinux-fsl-qoriq-c172cb73bc79fe69915b1a1a48e374aa4b1f8a59.tar.xz
Merge branch 'acpica-gpe' into release
Diffstat (limited to 'drivers/acpi/acpica/dsmethod.c')
-rw-r--r--drivers/acpi/acpica/dsmethod.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/drivers/acpi/acpica/dsmethod.c b/drivers/acpi/acpica/dsmethod.c
index 2a9a561..64750ee 100644
--- a/drivers/acpi/acpica/dsmethod.c
+++ b/drivers/acpi/acpica/dsmethod.c
@@ -584,8 +584,22 @@ acpi_ds_terminate_control_method(union acpi_operand_object *method_desc,
* want make the objects permanent.
*/
if (!(method_desc->method.flags & AOPOBJ_MODULE_LEVEL)) {
- acpi_ns_delete_namespace_by_owner(method_desc->method.
- owner_id);
+
+ /* Delete any direct children of (created by) this method */
+
+ acpi_ns_delete_namespace_subtree(walk_state->
+ method_node);
+
+ /*
+ * Delete any objects that were created by this method
+ * elsewhere in the namespace (if any were created).
+ */
+ if (method_desc->method.
+ flags & AOPOBJ_MODIFIED_NAMESPACE) {
+ acpi_ns_delete_namespace_by_owner(method_desc->
+ method.
+ owner_id);
+ }
}
}
@@ -605,7 +619,7 @@ acpi_ds_terminate_control_method(union acpi_operand_object *method_desc,
* we immediately reuse it for the next thread executing this method
*/
ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
- "*** Completed execution of one thread, %d threads remaining\n",
+ "*** Completed execution of one thread, %u threads remaining\n",
method_desc->method.thread_count));
} else {
/* This is the only executing thread for this method */