From 96c188d023fa9fd634378b5053138f8b9f28cd05 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Wed, 3 Feb 2021 00:03:22 -0500 Subject: [PATCH] winsys/amdgpu: move amdgpu_winsys_bo::is_shared to the u.real union MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit It's never true with slab and sparse buffers. Reviewed-by: Pierre-Eric Pelloux-Prayer Reviewed-by: Zoltán Böszörményi Part-of: --- src/gallium/winsys/amdgpu/drm/amdgpu_bo.c | 15 +++++++++------ src/gallium/winsys/amdgpu/drm/amdgpu_bo.h | 10 +++++----- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c index fab526d..a0e1d4d 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c @@ -66,9 +66,12 @@ static bool amdgpu_bo_wait(struct pb_buffer *_buf, uint64_t timeout, return false; } - simple_mtx_lock(&bo->lock); - bool is_shared = bo->is_shared; - simple_mtx_unlock(&bo->lock); + bool is_shared = false; + if (bo->bo) { + simple_mtx_lock(&bo->lock); + is_shared = bo->u.real.is_shared; + simple_mtx_unlock(&bo->lock); + } if (is_shared) { /* We can't use user fences for shared buffers, because user fences @@ -1584,7 +1587,7 @@ static struct pb_buffer *amdgpu_bo_from_handle(struct radeon_winsys *rws, bo->base.placement = initial; bo->base.usage = flags; bo->unique_id = __sync_fetch_and_add(&ws->next_bo_unique_id, 1); - bo->is_shared = true; + bo->u.real.is_shared = true; if (bo->base.placement & RADEON_DOMAIN_VRAM) ws->allocated_vram += align64(bo->base.size, ws->info.gart_page_size); @@ -1636,7 +1639,7 @@ static bool amdgpu_bo_get_handle(struct radeon_winsys *rws, whandle->handle = bo->u.real.kms_handle; simple_mtx_lock(&bo->lock); - bool is_shared = bo->is_shared; + bool is_shared = bo->u.real.is_shared; simple_mtx_unlock(&bo->lock); if (is_shared) @@ -1686,7 +1689,7 @@ static bool amdgpu_bo_get_handle(struct radeon_winsys *rws, simple_mtx_unlock(&ws->bo_export_table_lock); simple_mtx_lock(&bo->lock); - bo->is_shared = true; + bo->u.real.is_shared = true; simple_mtx_unlock(&bo->lock); return true; } diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.h b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.h index 9eb69ea..98fb609 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.h +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.h @@ -66,6 +66,11 @@ struct amdgpu_winsys_bo { void *cpu_ptr; /* for user_ptr and permanent maps */ uint32_t kms_handle; int map_count; + + /* Whether buffer_get_handle or buffer_from_handle has been called, + * it can only transition from false to true. Protected by lock. + */ + bool is_shared; } real; struct { struct pb_slab_entry entry; @@ -90,11 +95,6 @@ struct amdgpu_winsys_bo { bool is_user_ptr; bool use_reusable_pool; - /* Whether buffer_get_handle or buffer_from_handle has been called, - * it can only transition from false to true. Protected by lock. - */ - bool is_shared; - uint32_t unique_id; uint64_t va; simple_mtx_t lock; -- 2.7.4