Merge branch 'drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied...
[safe/jmp/linux-2.6] / drivers / acpi / utilities / utcache.c
index 2177cb1..285a0f5 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2006, R. Byron Moore
+ * Copyright (C) 2000 - 2007, R. Byron Moore
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -45,7 +45,6 @@
 
 #define _COMPONENT          ACPI_UTILITIES
 ACPI_MODULE_NAME("utcache")
-
 #ifdef ACPI_USE_LOCAL_CACHE
 /*******************************************************************************
  *
@@ -64,7 +63,7 @@ ACPI_MODULE_NAME("utcache")
 acpi_status
 acpi_os_create_cache(char *cache_name,
                     u16 object_size,
-                    u16 max_depth, struct acpi_memory_list **return_cache)
+                    u16 max_depth, struct acpi_memory_list ** return_cache)
 {
        struct acpi_memory_list *cache;
 
@@ -118,13 +117,14 @@ acpi_status acpi_os_purge_cache(struct acpi_memory_list * 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);
+               ACPI_FREE(cache->list_head);
 
                cache->list_head = next;
                cache->current_depth--;
@@ -161,7 +161,7 @@ acpi_status acpi_os_delete_cache(struct acpi_memory_list * cache)
 
        /* Now we can delete the cache object */
 
-       acpi_os_free(cache);
+       ACPI_FREE(cache);
        return (AE_OK);
 }
 
@@ -193,7 +193,7 @@ acpi_os_release_object(struct acpi_memory_list * cache, void *object)
        /* If cache is full, just free this object */
 
        if (cache->current_depth >= cache->max_depth) {
-               ACPI_MEM_FREE(object);
+               ACPI_FREE(object);
                ACPI_MEM_TRACKING(cache->total_freed++);
        }
 
@@ -243,7 +243,7 @@ void *acpi_os_acquire_object(struct acpi_memory_list *cache)
        acpi_status status;
        void *object;
 
-       ACPI_FUNCTION_NAME("os_acquire_object");
+       ACPI_FUNCTION_NAME(os_acquire_object);
 
        if (!cache) {
                return (NULL);
@@ -259,6 +259,7 @@ void *acpi_os_acquire_object(struct acpi_memory_list *cache)
        /* Check the cache first */
 
        if (cache->list_head) {
+
                /* There is an object available, use it */
 
                object = cache->list_head;
@@ -270,9 +271,9 @@ void *acpi_os_acquire_object(struct acpi_memory_list *cache)
                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_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)) {
@@ -287,14 +288,22 @@ void *acpi_os_acquire_object(struct acpi_memory_list *cache)
 
                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
+
+               /* 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);
                }