etnaviv: Add valgrind support
[mesa.git] / src / etnaviv / drm / etnaviv_bo_cache.c
index 116013cb2f1233b52b5c164375ea402d700ae833..3b28c1477aaccd61278f652b48e8daa96fb05fb3 100644 (file)
@@ -27,7 +27,7 @@
 #include "etnaviv_priv.h"
 #include "etnaviv_drmif.h"
 
-void bo_del(struct etna_bo *bo);
+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)
@@ -85,8 +85,9 @@ void etna_bo_cache_cleanup(struct etna_bo_cache *cache, time_t time)
                        if (time && ((time - bo->free_time) <= 1))
                                break;
 
+                       VG_BO_OBTAIN(bo);
                        list_del(&bo->list);
-                       bo_del(bo);
+                       _etna_bo_del(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);