iris: Record reusability of bo on construction
authorChris Wilson <chris@chris-wilson.co.uk>
Sun, 19 Aug 2018 09:32:43 +0000 (10:32 +0100)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:08 +0000 (10:26 -0800)
We know that if the bufmgr->reuse is set to false or if the bo is too
large for a bucket, the same will be true when we come to free the bo.

src/gallium/drivers/iris/iris_bufmgr.c

index ab81f2dbb92315ae8bb4f9c682b3fb084b8f6b34..e16226910b3a86c951bbcf321093bf0346ac2943 100644 (file)
@@ -614,7 +614,7 @@ retry:
 
    bo->name = name;
    p_atomic_set(&bo->refcount, 1);
-   bo->reusable = true;
+   bo->reusable = bucket && bufmgr->bo_reuse;
    bo->cache_coherent = bufmgr->has_llc;
    bo->index = -1;
    bo->kflags = EXEC_OBJECT_SUPPORTS_48B_ADDRESS | EXEC_OBJECT_PINNED;
@@ -870,10 +870,11 @@ bo_unreference_final(struct iris_bo *bo, time_t time)
 
    DBG("bo_unreference final: %d (%s)\n", bo->gem_handle, bo->name);
 
-   bucket = bucket_for_size(bufmgr, bo->size);
+   bucket = NULL;
+   if (bo->reusable)
+      bucket = bucket_for_size(bufmgr, bo->size);
    /* Put the buffer into our internal cache for reuse if we can. */
-   if (bufmgr->bo_reuse && bo->reusable && bucket != NULL &&
-       iris_bo_madvise(bo, I915_MADV_DONTNEED)) {
+   if (bucket && iris_bo_madvise(bo, I915_MADV_DONTNEED)) {
       bo->free_time = time;
       bo->name = NULL;