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