Skip to content

Commit

Permalink
ACPICA: Add support to delete all objects attached to the root namesp…
Browse files Browse the repository at this point in the history
…ace node.

This fix deletes any and all objects that have been attached to the
root node (via acpi_attach_data). Reported by Tomasz Nowicki.
ACPICA BZ 1026.

Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
  • Loading branch information
Bob Moore authored and Rafael J. Wysocki committed Nov 21, 2013
1 parent 794ba09 commit 3f69fe1
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 8 deletions.
6 changes: 6 additions & 0 deletions drivers/acpi/acpica/nsalloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,12 @@ void acpi_ns_delete_node(struct acpi_namespace_node *node)
obj_desc = next_desc;
}

/* Special case for the statically allocated root node */

if (node == acpi_gbl_root_node) {
return;
}

/* Now we can delete the node */

(void)acpi_os_release_object(acpi_gbl_namespace_cache, node);
Expand Down
18 changes: 10 additions & 8 deletions drivers/acpi/acpica/nsutils.c
Original file line number Diff line number Diff line change
Expand Up @@ -593,24 +593,26 @@ struct acpi_namespace_node *acpi_ns_validate_handle(acpi_handle handle)

void acpi_ns_terminate(void)
{
union acpi_operand_object *obj_desc;
acpi_status status;

ACPI_FUNCTION_TRACE(ns_terminate);

/*
* 1) Free the entire namespace -- all nodes and objects
*
* Delete all object descriptors attached to namepsace nodes
* Free the entire namespace -- all nodes and all objects
* attached to the nodes
*/
acpi_ns_delete_namespace_subtree(acpi_gbl_root_node);

/* Detach any objects attached to the root */
/* Delete any objects attached to the root node */

obj_desc = acpi_ns_get_attached_object(acpi_gbl_root_node);
if (obj_desc) {
acpi_ns_detach_object(acpi_gbl_root_node);
status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
if (ACPI_FAILURE(status)) {
return_VOID;
}

acpi_ns_delete_node(acpi_gbl_root_node);
(void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);

ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Namespace freed\n"));
return_VOID;
}
Expand Down

0 comments on commit 3f69fe1

Please sign in to comment.