Commit 794ba09b authored by Tomasz Nowicki's avatar Tomasz Nowicki Committed by Rafael J. Wysocki

ACPICA: Delete all attached data objects during namespace node deletion.

This fix updates namespace node deletion to delete the entire list
of attached objects (attached via acpi_attach_data) instead of
just one of the attached items. ACPICA BZ 1024.
Tomasz Nowicki (tomasz.nowicki@linaro.org).
Signed-off-by: default avatarTomasz Nowicki <tomasz.nowicki@linaro.org>
Signed-off-by: default avatarBob Moore <robert.moore@intel.com>
Signed-off-by: default avatarLv Zheng <lv.zheng@intel.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 9a0a3597
...@@ -106,6 +106,7 @@ struct acpi_namespace_node *acpi_ns_create_node(u32 name) ...@@ -106,6 +106,7 @@ struct acpi_namespace_node *acpi_ns_create_node(u32 name)
void acpi_ns_delete_node(struct acpi_namespace_node *node) void acpi_ns_delete_node(struct acpi_namespace_node *node)
{ {
union acpi_operand_object *obj_desc; union acpi_operand_object *obj_desc;
union acpi_operand_object *next_desc;
ACPI_FUNCTION_NAME(ns_delete_node); ACPI_FUNCTION_NAME(ns_delete_node);
...@@ -114,12 +115,13 @@ void acpi_ns_delete_node(struct acpi_namespace_node *node) ...@@ -114,12 +115,13 @@ void acpi_ns_delete_node(struct acpi_namespace_node *node)
acpi_ns_detach_object(node); acpi_ns_detach_object(node);
/* /*
* Delete an attached data object if present (an object that was created * Delete an attached data object list if present (objects that were
* and attached via acpi_attach_data). Note: After any normal object is * attached via acpi_attach_data). Note: After any normal object is
* detached above, the only possible remaining object is a data object. * detached above, the only possible remaining object(s) are data
* objects, in a linked list.
*/ */
obj_desc = node->object; obj_desc = node->object;
if (obj_desc && (obj_desc->common.type == ACPI_TYPE_LOCAL_DATA)) { while (obj_desc && (obj_desc->common.type == ACPI_TYPE_LOCAL_DATA)) {
/* Invoke the attached data deletion handler if present */ /* Invoke the attached data deletion handler if present */
...@@ -127,7 +129,9 @@ void acpi_ns_delete_node(struct acpi_namespace_node *node) ...@@ -127,7 +129,9 @@ void acpi_ns_delete_node(struct acpi_namespace_node *node)
obj_desc->data.handler(node, obj_desc->data.pointer); obj_desc->data.handler(node, obj_desc->data.pointer);
} }
next_desc = obj_desc->common.next_object;
acpi_ut_remove_reference(obj_desc); acpi_ut_remove_reference(obj_desc);
obj_desc = next_desc;
} }
/* Now we can delete the node */ /* Now we can delete the node */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment