Problems with deletion of the DdbHandle object type. I think we have it under control, thanks. >-----Original Message----- >From: Alexey Starikovskiy [mailto:aystarik@xxxxxxxxx] >Sent: Tuesday, May 12, 2009 11:54 AM >To: Moore, Robert >Cc: Lin, Ming M; Alexey Starikovskiy; Linux-acpi@xxxxxxxxxxxxxxx >Subject: Re: [PATCH 1/4] ACPICA: Remove use of caches in controlled way > >What bugs are you seeing? May I be of any help? > >Regards, >Alex. > > >Moore, Robert wrote: >> Removing the cache has exposed a couple of bugs that we are currently >working on. We need to make sure that we pass the ASLTS suite before the >code is integrated/released. >> >> Bob >> >> >> >>> -----Original Message----- >>> From: Lin, Ming M >>> Sent: Monday, May 11, 2009 1:14 AM >>> To: Alexey Starikovskiy >>> Cc: Moore, Robert; Linux-acpi@xxxxxxxxxxxxxxx >>> Subject: Re: [PATCH 1/4] ACPICA: Remove use of caches in controlled way >>> >>> Hi, Alexey >>> >>> The attachment are the linuxized version of your patches. >>> I added another patch (the 4th) to remove linux specific cache code. >>> >>> The patches are applied on top of linux-acpi-2.6/acpica branch. >>> >>> Do you have any suggestion what data I should collect to verify if these >>> patches have a performance gain? >>> >>> Lin Ming >>> >>> On Thu, 2009-05-07 at 23:52 +0800, Alexey Starikovskiy wrote: >>> >>>> Signed-off-by: Alexey Starikovskiy <astarikovskiy@xxxxxxx> >>>> --- >>>> >>>> source/components/utilities/utcache.c | 99 +++++-------------------- >-- >>>> >>> ------ >>> >>>> 1 files changed, 14 insertions(+), 85 deletions(-) >>>> >>>> >>>> diff --git a/source/components/utilities/utcache.c >>>> >>> b/source/components/utilities/utcache.c >>> >>>> index aabc0a2..d08d520 100644 >>>> --- a/source/components/utilities/utcache.c >>>> +++ b/source/components/utilities/utcache.c >>>> @@ -287,49 +287,15 @@ AcpiOsReleaseObject ( >>>> ACPI_MEMORY_LIST *Cache, >>>> void *Object) >>>> { >>>> - ACPI_STATUS Status; >>>> - >>>> - >>>> ACPI_FUNCTION_ENTRY (); >>>> >>>> - >>>> if (!Cache || !Object) >>>> { >>>> return (AE_BAD_PARAMETER); >>>> } >>>> >>>> - /* If cache is full, just free this object */ >>>> - >>>> - if (Cache->CurrentDepth >= Cache->MaxDepth) >>>> - { >>>> - ACPI_FREE (Object); >>>> - ACPI_MEM_TRACKING (Cache->TotalFreed++); >>>> - } >>>> - >>>> - /* Otherwise put this object back into the cache */ >>>> - >>>> - else >>>> - { >>>> - Status = AcpiUtAcquireMutex (ACPI_MTX_CACHES); >>>> - if (ACPI_FAILURE (Status)) >>>> - { >>>> - return (Status); >>>> - } >>>> - >>>> - /* Mark the object as cached */ >>>> - >>>> - ACPI_MEMSET (Object, 0xCA, Cache->ObjectSize); >>>> - ACPI_SET_DESCRIPTOR_TYPE (Object, ACPI_DESC_TYPE_CACHED); >>>> - >>>> - /* Put the object at the head of the cache list */ >>>> - >>>> - * (ACPI_CAST_INDIRECT_PTR (char, >>>> - &(((char *) Object)[Cache->LinkOffset]))) = Cache- >>ListHead; >>>> - Cache->ListHead = Object; >>>> - Cache->CurrentDepth++; >>>> - >>>> - (void) AcpiUtReleaseMutex (ACPI_MTX_CACHES); >>>> - } >>>> + ACPI_FREE (Object); >>>> + ACPI_MEM_TRACKING (Cache->TotalFreed++); >>>> >>>> return (AE_OK); >>>> } >>>> @@ -353,8 +319,6 @@ AcpiOsAcquireObject ( >>>> ACPI_MEMORY_LIST *Cache) >>>> { >>>> ACPI_STATUS Status; >>>> - void *Object; >>>> - >>>> >>>> ACPI_FUNCTION_NAME (OsAcquireObject); >>>> >>>> @@ -372,61 +336,26 @@ AcpiOsAcquireObject ( >>>> >>>> ACPI_MEM_TRACKING (Cache->Requests++); >>>> >>>> - /* Check the cache first */ >>>> + /* The cache is empty, create a new object */ >>>> >>>> - if (Cache->ListHead) >>>> - { >>>> - /* There is an object available, use it */ >>>> - >>>> - Object = Cache->ListHead; >>>> - Cache->ListHead = *(ACPI_CAST_INDIRECT_PTR (char, >>>> - &(((char *) Object)[Cache- >>>> LinkOffset]))); >>>> - >>>> - Cache->CurrentDepth--; >>>> - >>>> - ACPI_MEM_TRACKING (Cache->Hits++); >>>> - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, >>>> - "Object %p from %s cache\n", Object, Cache->ListName)); >>>> - >>>> - Status = AcpiUtReleaseMutex (ACPI_MTX_CACHES); >>>> - if (ACPI_FAILURE (Status)) >>>> - { >>>> - return (NULL); >>>> - } >>>> - >>>> - /* Clear (zero) the previously used Object */ >>>> - >>>> - ACPI_MEMSET (Object, 0, Cache->ObjectSize); >>>> - } >>>> - else >>>> - { >>>> - /* The cache is empty, create a new object */ >>>> - >>>> - ACPI_MEM_TRACKING (Cache->TotalAllocated++); >>>> + ACPI_MEM_TRACKING (Cache->TotalAllocated++); >>>> >>>> #ifdef ACPI_DBG_TRACK_ALLOCATIONS >>>> - if ((Cache->TotalAllocated - Cache->TotalFreed) > Cache- >>>> MaxOccupied) >>>> - { >>>> - Cache->MaxOccupied = Cache->TotalAllocated - Cache- >>>> TotalFreed; >>>> - } >>>> + if ((Cache->TotalAllocated - Cache->TotalFreed) > Cache- >>>> MaxOccupied) >>>> + { >>>> + Cache->MaxOccupied = Cache->TotalAllocated - Cache- >>TotalFreed; >>>> + } >>>> #endif >>>> >>>> - /* Avoid deadlock with ACPI_ALLOCATE_ZEROED */ >>>> + /* Avoid deadlock with ACPI_ALLOCATE_ZEROED */ >>>> >>>> - Status = AcpiUtReleaseMutex (ACPI_MTX_CACHES); >>>> - if (ACPI_FAILURE (Status)) >>>> - { >>>> - return (NULL); >>>> - } >>>> - >>>> - Object = ACPI_ALLOCATE_ZEROED (Cache->ObjectSize); >>>> - if (!Object) >>>> - { >>>> - return (NULL); >>>> - } >>>> + Status = AcpiUtReleaseMutex (ACPI_MTX_CACHES); >>>> + if (ACPI_FAILURE (Status)) >>>> + { >>>> + return (NULL); >>>> } >>>> >>>> - return (Object); >>>> + return ACPI_ALLOCATE_ZEROED (Cache->ObjectSize); >>>> } >>>> #endif /* ACPI_USE_LOCAL_CACHE */ >>>> >>>> >>>> -- >>>> 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 >>>> >> -- >> 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 >> -- 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