|
@@ -75,6 +75,7 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object)
|
|
union acpi_operand_object *handler_desc;
|
|
union acpi_operand_object *handler_desc;
|
|
union acpi_operand_object *second_desc;
|
|
union acpi_operand_object *second_desc;
|
|
union acpi_operand_object *next_desc;
|
|
union acpi_operand_object *next_desc;
|
|
|
|
+ union acpi_operand_object **last_obj_ptr;
|
|
|
|
|
|
ACPI_FUNCTION_TRACE_PTR(ut_delete_internal_obj, object);
|
|
ACPI_FUNCTION_TRACE_PTR(ut_delete_internal_obj, object);
|
|
|
|
|
|
@@ -223,6 +224,26 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object)
|
|
*/
|
|
*/
|
|
handler_desc = object->region.handler;
|
|
handler_desc = object->region.handler;
|
|
if (handler_desc) {
|
|
if (handler_desc) {
|
|
|
|
+ next_desc =
|
|
|
|
+ handler_desc->address_space.region_list;
|
|
|
|
+ last_obj_ptr =
|
|
|
|
+ &handler_desc->address_space.region_list;
|
|
|
|
+
|
|
|
|
+ /* Remove the region object from the handler's list */
|
|
|
|
+
|
|
|
|
+ while (next_desc) {
|
|
|
|
+ if (next_desc == object) {
|
|
|
|
+ *last_obj_ptr =
|
|
|
|
+ next_desc->region.next;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /* Walk the linked list of handler */
|
|
|
|
+
|
|
|
|
+ last_obj_ptr = &next_desc->region.next;
|
|
|
|
+ next_desc = next_desc->region.next;
|
|
|
|
+ }
|
|
|
|
+
|
|
if (handler_desc->address_space.handler_flags &
|
|
if (handler_desc->address_space.handler_flags &
|
|
ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) {
|
|
ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) {
|
|
|
|
|