Re: ACPICA Release 20081031 linuxized patch set

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Len, please try the below patch.

commit 1f959eedaf20bef4c1b40bd64be87c774f9f2032
Author: Lin Ming <ming.m.lin@xxxxxxxxx>
Date:   Thu Nov 13 17:31:59 2008 +0800

    Update object reference count if it's within a package
---
 drivers/acpi/namespace/nspredef.c |   25 ++++++++++++++++++++++---
 1 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/drivers/acpi/namespace/nspredef.c b/drivers/acpi/namespace/nspredef.c
index 82a28d0..3f346a2 100644
--- a/drivers/acpi/namespace/nspredef.c
+++ b/drivers/acpi/namespace/nspredef.c
@@ -91,7 +91,8 @@ acpi_ns_check_reference(char *pathname,
 
 static acpi_status
 acpi_ns_repair_object(u32 expected_btypes,
-		      union acpi_operand_object **return_object_ptr);
+		      union acpi_operand_object **return_object_ptr,
+		      u32 package_index);
 
 /*
  * Names for the types that can be returned by the predefined objects.
@@ -890,7 +891,8 @@ acpi_ns_check_object_type(char *pathname,
 		/* Type mismatch -- attempt repair of the returned object */
 
 		status =
-		    acpi_ns_repair_object(expected_btypes, return_object_ptr);
+		    acpi_ns_repair_object(expected_btypes, return_object_ptr,
+			package_index);
 		if (ACPI_SUCCESS(status)) {
 			return (status);
 		}
@@ -986,6 +988,8 @@ acpi_ns_check_reference(char *pathname,
  * PARAMETERS:  Pathname        - Full pathname to the node (for error msgs)
  *              return_object_ptr - Pointer to the object returned from the
  *                                evaluation of a method or object
+ *              PackageIndex    - Index of object within parent package
+ *                                (if applicable - ACPI_NOT_PACKAGE otherwise)
  *
  * RETURN:      Status. AE_OK if repair was successful.
  *
@@ -996,7 +1000,8 @@ acpi_ns_check_reference(char *pathname,
 
 static acpi_status
 acpi_ns_repair_object(u32 expected_btypes,
-		      union acpi_operand_object **return_object_ptr)
+		      union acpi_operand_object **return_object_ptr,
+		      u32 package_index)
 {
 	union acpi_operand_object *return_object = *return_object_ptr;
 	union acpi_operand_object *new_object;
@@ -1039,6 +1044,20 @@ acpi_ns_repair_object(u32 expected_btypes,
 
 		acpi_ut_remove_reference(return_object);
 		*return_object_ptr = new_object;
+
+		/*
+		 * If this object is within a package, we need to:
+		 * 1. Decrease the reference count of the original object,
+		 *    it was increased when buidling the package
+		 * 2. Increase the reference count of the new object,
+		 *    it will be decreased when releasing the package
+		 */
+
+		if (package_index != ACPI_NOT_PACKAGE) {
+			acpi_ut_remove_reference(return_object);
+			acpi_ut_add_reference(new_object);
+		}
+
 		return (AE_OK);
 
 	default:


On Thu, 2008-11-13 at 14:54 +0800, Len Brown wrote:
> 
> > [PATCH 01/18] ACPICA: Fix several warnings under gcc 4 compiler
> > [PATCH 02/18] ACPICA: Update FACS waking vector interfaces
> > [PATCH 03/18] ACPICA: Fix possible memory leak on error in parser
> > [PATCH 04/18] ACPICA: Optimize execution of AML While loops
> > [PATCH 05/18] ACPICA: Add a mechanism to escape infinite AML While() loops
> > [PATCH 06/18] ACPICA: Update debug output for IndexField I/O
> > [PATCH 07/18] ACPICA: Fix namestring for the SystemCMOS address space
> > [PATCH 08/18] ACPICA: Emit warning if two FACS or DSDT tables found in the FADT
> > [PATCH 09/18] ACPICA: Add global pointer for FACS table to simplify FACS access
> > [PATCH 10/18] ACPICA: Reformat comments, no functional changes
> > [PATCH 11/18] ACPICA: Add support to externally execute _OSI method
> > [PATCH 12/18] ACPICA: Remove references to obsolete ACPI_DUMP_APP
> > [PATCH 13/18] ACPICA: Fix to allow aliases within ASL namepaths
> > [PATCH 14/18] ACPICA: Allow multiple backslash prefix in namepaths
> > [PATCH 15/18] ACPICA: Allow _WAK method to return an Integer
> > [PATCH 16/18] ACPICA: Add Buffer->String conversion for predefined methods
> > [PATCH 17/18] ACPICA: Consolidate method arg count validation code
> > [PATCH 18/18] ACPICA: Enhance implicit return mechanism
> 
> checkpatch.pl wasn't happy about the 80 column errors, or
> the unnecessary {}'s in statements like this:
> 
> if (foo) {
> 	bar;
> 	}
> 
> I think the construct above is actually good programming practice
> when the simple statement is a macro.  However, if it really is
> a simple statment, such as return, I agree with checkpatch.pl.
> 
> re: 80 colmns
> I usually let them go if it makes the code easier to read.
> howver, block comments w/ sufficient width really should
> not need to violate the 80 column limit.
> 
> no, i don't advocate you fix these things in the acpica->linux
> translation process; as we want to make that as automated
> as possible and fixing style things by hand only makes it harder later.
> 
> but more importantly it looks like we have a double free:
> 
> ACPI Warning (utdelete-0420): Large Reference Count (6B6B) in object 
> ffff88007c991b58 [20080926]
> ACPI Warning (utdelete-0420): Large Reference Count (6B6B) in object 
> ffff88007c991df8 [20080926]
> ACPI Warning (utdelete-0420): Large Reference Count (6B6C) in object 
> ffff88007c991b58 [20080926]
> ACPI Warning (utdelete-0420): Large Reference Count (6B6C) in object 
> ffff88007c991df8 [20080926]
> Slab corruption: Acpi-Operand start=ffff88007c991b58, len=72
> Redzone: 0x9f911029d74e35b/0x9f911029d74e35b.
> Last user: [<ffffffff80390463>](acpi_os_release_object+0x9/0xd)
> 000: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6d 6b 6b 6b 6b 6b
> Prev obj: start=ffff88007c991af8, len=72
> Redzone: 0xd84156c5635688c0/0xd84156c5635688c0.
> Last user: 
> [<ffffffff803b0174>](acpi_ut_allocate_object_desc_dbg+0x3c/0xb3)
> 000: 00 00 00 00 00 00 00 00 0e 03 01 00 04 00 00 00
> 010: 78 83 17 7b 00 88 ff ff 06 00 00 00 00 00 00 00
> Next obj: start=ffff88007c991bb8, len=72
> Redzone: 0xd84156c5635688c0/0xd84156c5635688c0.
> Last user: 
> [<ffffffff803b0174>](acpi_ut_allocate_object_desc_dbg+0x3c/0xb3)
> 000: 00 00 00 00 00 00 00 00 0e 01 03 00 00 00 00 00
> 010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> Slab corruption: Acpi-Operand start=ffff88007c991df8, len=72
> Redzone: 0x9f911029d74e35b/0x9f911029d74e35b.
> Last user: [<ffffffff80390463>](acpi_os_release_object+0x9/0xd)
> 000: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6d 6b 6b 6b 6b 6b
> Prev obj: start=ffff88007c991d98, len=72
> Redzone: 0x9f911029d74e35b/0x9f911029d74e35b.
> Last user: [<ffffffff80390463>](acpi_os_release_object+0x9/0xd)
> 000: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b
> 010: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b
> Next obj: start=ffff88007c991e58, len=72
> Redzone: 0x9f911029d74e35b/0x9f911029d74e35b.
> Last user: [<0000000000000000>](0x0)
> 000: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b
> 010: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b
> ACPI Warning (utdelete-0420): Large Reference Count (6B6B) in object 
> ffff88007c991b58 [20080926]
> ACPI Warning (utdelete-0420): Large Reference Count (6B6B) in object 
> ffff88007c991df8 [20080926]
> ACPI Warning (utdelete-0420): Large Reference Count (6B6A) in object 
> ffff88007c991b58 [20080926]
> ACPI Warning (utdelete-0420): Large Reference Count (6B6A) in object 
> ffff88007c991df8 [20080926]
> ACPI Warning (utdelete-0420): Large Reference Count (6B6B) in object 
> ffff88007c991b58 [20080926]
> ACPI Warning (utdelete-0420): Large Reference Count (6B6B) in object 
> ffff88007c991df8 [20080926]
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux