This patch works very well here. I have checked it in. Thanks for the help, Lin Ming. >-----Original Message----- >From: Lin, Ming M >Sent: Thursday, November 13, 2008 1:37 AM >To: Len Brown; Moore, Robert >Cc: Brown, Len; linux-acpi@xxxxxxxxxxxxxxx; acpi >Subject: Re: ACPICA Release 20081031 linuxized patch set > >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