From: Nicolai Hähnle Date: Tue, 7 Feb 2017 16:58:39 +0000 (+0100) Subject: winsys/amdgpu: take fences when freeing a backing buffer X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0baee15596d51df5fe0f0edd4b48bd500c26e2cd;p=mesa.git winsys/amdgpu: take fences when freeing a backing buffer 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. v2: - remove pipe_mutex_* Reviewed-by: Marek Olšák --- diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c index 517bf532618..dd0603ad3ae 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c @@ -667,10 +667,17 @@ 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; + bo->u.sparse.num_backing_pages -= backing->bo->base.size / RADEON_SPARSE_PAGE_SIZE; + mtx_lock(&ws->bo_fence_lock); + amdgpu_add_fences(backing->bo, bo->num_fences, bo->fences); + mtx_unlock(&ws->bo_fence_lock); + list_del(&backing->list); amdgpu_winsys_bo_reference(&backing->bo, NULL); FREE(backing->chunks); @@ -737,7 +744,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; } @@ -758,7 +765,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)); }