Skip to content

Commit

Permalink
ACPICA: Update for automatic repair code for objects returned by eval…
Browse files Browse the repository at this point in the history
…uate_object

ACPICA commit 6b58810b9aad7358fbf1a0f4057fefa8d29838d3

This change fixes two instances where the repair code made an incorrect
assumption about how reference counts are assigned to package objects.
Resolves issues where a warning was issued about a "large reference
count" -- which usually indicates an attempt to delete an object
that has previously been poisoned and released into the object cache.

Link: https://github.com/acpica/acpica/commit/6b58810b
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 Apr 26, 2017
1 parent 3b2d691 commit ed7f8bc
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 18 deletions.
16 changes: 3 additions & 13 deletions drivers/acpi/acpica/nsrepair.c
Original file line number Diff line number Diff line change
Expand Up @@ -290,22 +290,12 @@ acpi_ns_simple_repair(struct acpi_evaluate_info *info,
/* Object was successfully repaired */

if (package_index != ACPI_NOT_PACKAGE_ELEMENT) {
/*
* The original object is a package element. We need to
* decrement the reference count of the original object,
* for removing it from the package.
*
* However, if the original object was just wrapped with a
* package object as part of the repair, we don't need to
* change the reference count.
*/

/* Update reference count of new object */

if (!(info->return_flags & ACPI_OBJECT_WRAPPED)) {
new_object->common.reference_count =
return_object->common.reference_count;

if (return_object->common.reference_count > 1) {
return_object->common.reference_count--;
}
}

ACPI_DEBUG_PRINT((ACPI_DB_REPAIR,
Expand Down
6 changes: 1 addition & 5 deletions drivers/acpi/acpica/nsrepair2.c
Original file line number Diff line number Diff line change
Expand Up @@ -403,16 +403,12 @@ acpi_ns_repair_CID(struct acpi_evaluate_info *info,
return (status);
}

/* Take care with reference counts */

if (original_element != *element_ptr) {

/* Element was replaced */
/* Update reference count of new object */

(*element_ptr)->common.reference_count =
original_ref_count;

acpi_ut_remove_reference(original_element);
}

element_ptr++;
Expand Down

0 comments on commit ed7f8bc

Please sign in to comment.