util/hash_table: update users to use new optimal integer hash functions
[mesa.git] / src / etnaviv / drm / etnaviv_bo_cache.c
index fa0d2a28451e7a1e48ff8f4b6f02664fd8b98725..93893b52b23aefe49ba6ee769133c78eb0284ae1 100644 (file)
@@ -27,8 +27,8 @@
 #include "etnaviv_priv.h"
 #include "etnaviv_drmif.h"
 
-void bo_del(struct etna_bo *bo);
-extern pthread_mutex_t table_lock;
+void _etna_bo_del(struct etna_bo *bo);
+extern pthread_mutex_t etna_drm_table_lock;
 
 static void add_bucket(struct etna_bo_cache *cache, int size)
 {
@@ -66,7 +66,7 @@ void etna_bo_cache_init(struct etna_bo_cache *cache)
        }
 }
 
-/* Frees older cached buffers.  Called under table_lock */
+/* Frees older cached buffers.  Called under etna_drm_table_lock */
 void etna_bo_cache_cleanup(struct etna_bo_cache *cache, time_t time)
 {
        unsigned i;
@@ -78,15 +78,16 @@ void etna_bo_cache_cleanup(struct etna_bo_cache *cache, time_t time)
                struct etna_bo_bucket *bucket = &cache->cache_bucket[i];
                struct etna_bo *bo;
 
-               while (!LIST_IS_EMPTY(&bucket->list)) {
+               while (!list_is_empty(&bucket->list)) {
                        bo = LIST_ENTRY(struct etna_bo, bucket->list.next, list);
 
                        /* keep things in cache for at least 1 second: */
                        if (time && ((time - bo->free_time) <= 1))
                                break;
 
+                       VG_BO_OBTAIN(bo);
                        list_del(&bo->list);
-                       bo_del(bo);
+                       _etna_bo_del(bo);
                }
        }
 
@@ -122,9 +123,9 @@ static struct etna_bo *find_in_bucket(struct etna_bo_bucket *bucket, uint32_t fl
 {
        struct etna_bo *bo = NULL, *tmp;
 
-       pthread_mutex_lock(&table_lock);
+       pthread_mutex_lock(&etna_drm_table_lock);
 
-       if (LIST_IS_EMPTY(&bucket->list))
+       if (list_is_empty(&bucket->list))
                goto out_unlock;
 
        LIST_FOR_EACH_ENTRY_SAFE(bo, tmp, &bucket->list, list) {
@@ -146,7 +147,7 @@ static struct etna_bo *find_in_bucket(struct etna_bo_bucket *bucket, uint32_t fl
        bo = NULL;
 
 out_unlock:
-       pthread_mutex_unlock(&table_lock);
+       pthread_mutex_unlock(&etna_drm_table_lock);
 
        return bo;
 }
@@ -169,6 +170,7 @@ struct etna_bo *etna_bo_cache_alloc(struct etna_bo_cache *cache, uint32_t *size,
                *size = bucket->size;
                bo = find_in_bucket(bucket, flags);
                if (bo) {
+                       VG_BO_OBTAIN(bo);
                        p_atomic_set(&bo->refcnt, 1);
                        etna_device_ref(bo->dev);
                        return bo;
@@ -189,6 +191,7 @@ int etna_bo_cache_free(struct etna_bo_cache *cache, struct etna_bo *bo)
                clock_gettime(CLOCK_MONOTONIC, &time);
 
                bo->free_time = time.tv_sec;
+               VG_BO_RELEASE(bo);
                list_addtail(&bo->list, &bucket->list);
                etna_bo_cache_cleanup(cache, time.tv_sec);