[Mesa-dev] [PATCH 17/21] winsys/amdgpu: take fences when freeing a backing buffer

Nicolai Hähnle nhaehnle at gmail.com
Wed Feb 8 12:42:59 UTC 2017


From: Nicolai Hähnle <nicolai.haehnle at amd.com>

We never add fences to backing buffers during submit. When we free a
backing buffer, it must inherit the sparse buffer's fences, so that it
doesn't get re-used prematurely via the cache.
---
 src/gallium/winsys/amdgpu/drm/amdgpu_bo.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
index a5a7f04..634be92 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
@@ -667,8 +667,15 @@ sparse_backing_alloc(struct amdgpu_winsys_bo *bo, uint32_t *pstart_page, uint32_
 }
 
 static void
-sparse_free_backing_buffer(struct amdgpu_sparse_backing *backing)
+sparse_free_backing_buffer(struct amdgpu_winsys_bo *bo,
+                           struct amdgpu_sparse_backing *backing)
 {
+   struct amdgpu_winsys *ws = backing->bo->ws;
+
+   pipe_mutex_lock(ws->bo_fence_lock);
+   amdgpu_add_fences(backing->bo, bo->num_fences, bo->fences);
+   pipe_mutex_unlock(ws->bo_fence_lock);
+
    list_del(&backing->list);
    amdgpu_winsys_bo_reference(&backing->bo, NULL);
    FREE(backing->chunks);
@@ -735,7 +742,7 @@ sparse_backing_free(struct amdgpu_winsys_bo *bo,
 
    if (backing->num_chunks == 1 && backing->chunks[0].begin == 0 &&
        backing->chunks[0].end == backing->bo->base.size / RADEON_SPARSE_PAGE_SIZE)
-      sparse_free_backing_buffer(backing);
+      sparse_free_backing_buffer(bo, backing);
 
    return true;
 }
@@ -838,7 +845,8 @@ static void amdgpu_bo_sparse_destroy(struct pb_buffer *_buf)
 
    while (!list_empty(&bo->u.sparse.backing)) {
       struct amdgpu_sparse_backing *dummy = NULL;
-      sparse_free_backing_buffer(container_of(bo->u.sparse.backing.next,
+      sparse_free_backing_buffer(bo,
+                                 container_of(bo->u.sparse.backing.next,
                                               dummy, list));
    }
 
-- 
2.9.3



More information about the mesa-dev mailing list