X-Git-Url: http://ftp.safe.ca/?a=blobdiff_plain;f=drivers%2Facpi%2Futilities%2Futcache.c;h=285a0f5317604c21f088d273f611d53d9eff494d;hb=136c4bbfe69336cd1d0b076cfc0ef6b92d576a19;hp=c0df0585c68344b742a7c810567ec37b206f6bc1;hpb=f9f4601f331aa1226d7a798a01950efbb388f07f;p=safe%2Fjmp%2Flinux-2.6 diff --git a/drivers/acpi/utilities/utcache.c b/drivers/acpi/utilities/utcache.c index c0df058..285a0f5 100644 --- a/drivers/acpi/utilities/utcache.c +++ b/drivers/acpi/utilities/utcache.c @@ -5,7 +5,7 @@ *****************************************************************************/ /* - * Copyright (C) 2000 - 2005, R. Byron Moore + * Copyright (C) 2000 - 2007, R. Byron Moore * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -41,13 +41,10 @@ * POSSIBILITY OF SUCH DAMAGES. */ - #include #define _COMPONENT ACPI_UTILITIES - ACPI_MODULE_NAME ("utcache") - - +ACPI_MODULE_NAME("utcache") #ifdef ACPI_USE_LOCAL_CACHE /******************************************************************************* * @@ -63,19 +60,14 @@ * DESCRIPTION: Create a cache object * ******************************************************************************/ - acpi_status -acpi_os_create_cache ( - char *cache_name, - u16 object_size, - u16 max_depth, - struct acpi_memory_list **return_cache) +acpi_os_create_cache(char *cache_name, + u16 object_size, + u16 max_depth, struct acpi_memory_list ** return_cache) { - struct acpi_memory_list *cache; - - - ACPI_FUNCTION_ENTRY (); + struct acpi_memory_list *cache; + ACPI_FUNCTION_ENTRY(); if (!cache_name || !return_cache || (object_size < 16)) { return (AE_BAD_PARAMETER); @@ -83,24 +75,23 @@ acpi_os_create_cache ( /* Create the cache object */ - cache = acpi_os_allocate (sizeof (struct acpi_memory_list)); + cache = acpi_os_allocate(sizeof(struct acpi_memory_list)); if (!cache) { return (AE_NO_MEMORY); } /* Populate the cache object and return it */ - ACPI_MEMSET (cache, 0, sizeof (struct acpi_memory_list)); + ACPI_MEMSET(cache, 0, sizeof(struct acpi_memory_list)); cache->link_offset = 8; - cache->list_name = cache_name; + cache->list_name = cache_name; cache->object_size = object_size; - cache->max_depth = max_depth; + cache->max_depth = max_depth; *return_cache = cache; return (AE_OK); } - /******************************************************************************* * * FUNCTION: acpi_os_purge_cache @@ -113,15 +104,11 @@ acpi_os_create_cache ( * ******************************************************************************/ -acpi_status -acpi_os_purge_cache ( - struct acpi_memory_list *cache) +acpi_status acpi_os_purge_cache(struct acpi_memory_list * cache) { - char *next; - - - ACPI_FUNCTION_ENTRY (); + char *next; + ACPI_FUNCTION_ENTRY(); if (!cache) { return (AE_BAD_PARAMETER); @@ -130,11 +117,14 @@ acpi_os_purge_cache ( /* Walk the list of objects in this cache */ while (cache->list_head) { + /* Delete and unlink one cached state object */ - next = *(ACPI_CAST_INDIRECT_PTR (char, - &(((char *) cache->list_head)[cache->link_offset]))); - ACPI_MEM_FREE (cache->list_head); + next = *(ACPI_CAST_INDIRECT_PTR(char, + &(((char *)cache-> + list_head)[cache-> + link_offset]))); + ACPI_FREE(cache->list_head); cache->list_head = next; cache->current_depth--; @@ -143,7 +133,6 @@ acpi_os_purge_cache ( return (AE_OK); } - /******************************************************************************* * * FUNCTION: acpi_os_delete_cache @@ -157,30 +146,25 @@ acpi_os_purge_cache ( * ******************************************************************************/ -acpi_status -acpi_os_delete_cache ( - struct acpi_memory_list *cache) +acpi_status acpi_os_delete_cache(struct acpi_memory_list * cache) { - acpi_status status; - + acpi_status status; - ACPI_FUNCTION_ENTRY (); + ACPI_FUNCTION_ENTRY(); + /* Purge all objects in the cache */ - /* Purge all objects in the cache */ - - status = acpi_os_purge_cache (cache); - if (ACPI_FAILURE (status)) { + status = acpi_os_purge_cache(cache); + if (ACPI_FAILURE(status)) { return (status); } /* Now we can delete the cache object */ - acpi_os_free (cache); + ACPI_FREE(cache); return (AE_OK); } - /******************************************************************************* * * FUNCTION: acpi_os_release_object @@ -196,15 +180,11 @@ acpi_os_delete_cache ( ******************************************************************************/ acpi_status -acpi_os_release_object ( - struct acpi_memory_list *cache, - void *object) +acpi_os_release_object(struct acpi_memory_list * cache, void *object) { - acpi_status status; - - - ACPI_FUNCTION_ENTRY (); + acpi_status status; + ACPI_FUNCTION_ENTRY(); if (!cache || !object) { return (AE_BAD_PARAMETER); @@ -213,37 +193,38 @@ acpi_os_release_object ( /* If cache is full, just free this object */ if (cache->current_depth >= cache->max_depth) { - ACPI_MEM_FREE (object); - ACPI_MEM_TRACKING (cache->total_freed++); + ACPI_FREE(object); + ACPI_MEM_TRACKING(cache->total_freed++); } /* Otherwise put this object back into the cache */ else { - status = acpi_ut_acquire_mutex (ACPI_MTX_CACHES); - if (ACPI_FAILURE (status)) { + status = acpi_ut_acquire_mutex(ACPI_MTX_CACHES); + if (ACPI_FAILURE(status)) { return (status); } /* Mark the object as cached */ - ACPI_MEMSET (object, 0xCA, cache->object_size); - ACPI_SET_DESCRIPTOR_TYPE (object, ACPI_DESC_TYPE_CACHED); + ACPI_MEMSET(object, 0xCA, cache->object_size); + 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->link_offset]))) = cache->list_head; + *(ACPI_CAST_INDIRECT_PTR(char, + &(((char *)object)[cache-> + link_offset]))) = + cache->list_head; cache->list_head = object; cache->current_depth++; - (void) acpi_ut_release_mutex (ACPI_MTX_CACHES); + (void)acpi_ut_release_mutex(ACPI_MTX_CACHES); } return (AE_OK); } - /******************************************************************************* * * FUNCTION: acpi_os_acquire_object @@ -257,65 +238,72 @@ acpi_os_release_object ( * ******************************************************************************/ -void * -acpi_os_acquire_object ( - struct acpi_memory_list *cache) +void *acpi_os_acquire_object(struct acpi_memory_list *cache) { - acpi_status status; - void *object; - - - ACPI_FUNCTION_NAME ("os_acquire_object"); + acpi_status status; + void *object; + ACPI_FUNCTION_NAME(os_acquire_object); if (!cache) { return (NULL); } - status = acpi_ut_acquire_mutex (ACPI_MTX_CACHES); - if (ACPI_FAILURE (status)) { + status = acpi_ut_acquire_mutex(ACPI_MTX_CACHES); + if (ACPI_FAILURE(status)) { return (NULL); } - ACPI_MEM_TRACKING (cache->requests++); + ACPI_MEM_TRACKING(cache->requests++); /* Check the cache first */ if (cache->list_head) { + /* There is an object available, use it */ object = cache->list_head; - cache->list_head = *(ACPI_CAST_INDIRECT_PTR (char, - &(((char *) object)[cache->link_offset]))); + cache->list_head = *(ACPI_CAST_INDIRECT_PTR(char, + &(((char *) + object)[cache-> + link_offset]))); cache->current_depth--; - ACPI_MEM_TRACKING (cache->hits++); - ACPI_MEM_TRACKING (ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Object %p from %s cache\n", object, cache->list_name))); + ACPI_MEM_TRACKING(cache->hits++); + ACPI_DEBUG_PRINT((ACPI_DB_EXEC, + "Object %p from %s cache\n", object, + cache->list_name)); - status = acpi_ut_release_mutex (ACPI_MTX_CACHES); - if (ACPI_FAILURE (status)) { + status = acpi_ut_release_mutex(ACPI_MTX_CACHES); + if (ACPI_FAILURE(status)) { return (NULL); } /* Clear (zero) the previously used Object */ - ACPI_MEMSET (object, 0, cache->object_size); - } - else { + ACPI_MEMSET(object, 0, cache->object_size); + } else { /* The cache is empty, create a new object */ - ACPI_MEM_TRACKING (cache->total_allocated++); + ACPI_MEM_TRACKING(cache->total_allocated++); - /* Avoid deadlock with ACPI_MEM_CALLOCATE */ +#ifdef ACPI_DBG_TRACK_ALLOCATIONS + if ((cache->total_allocated - cache->total_freed) > + cache->max_occupied) { + cache->max_occupied = + cache->total_allocated - cache->total_freed; + } +#endif - status = acpi_ut_release_mutex (ACPI_MTX_CACHES); - if (ACPI_FAILURE (status)) { + /* Avoid deadlock with ACPI_ALLOCATE_ZEROED */ + + status = acpi_ut_release_mutex(ACPI_MTX_CACHES); + if (ACPI_FAILURE(status)) { return (NULL); } - object = ACPI_MEM_CALLOCATE (cache->object_size); + object = ACPI_ALLOCATE_ZEROED(cache->object_size); if (!object) { return (NULL); } @@ -323,6 +311,4 @@ acpi_os_acquire_object ( return (object); } -#endif /* ACPI_USE_LOCAL_CACHE */ - - +#endif /* ACPI_USE_LOCAL_CACHE */