From 7e1ef488d47fb455db37d264e437e6ca23ee11f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Ondra=C4=8Dka?= Date: Thu, 9 Apr 2026 14:10:53 +0200 Subject: [PATCH] winsys/radeon: Extract BO import ref helper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Pavel Ondračka --- src/gallium/winsys/radeon/drm/radeon_drm_bo.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c index 50a08c8fa3d..59a35923c4b 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c +++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c @@ -33,6 +33,18 @@ static inline struct radeon_bo *radeon_bo(struct pb_buffer_lean *bo) return (struct radeon_bo *)bo; } +static bool +radeon_bo_ref_existing(struct radeon_bo *bo) +{ + if (unlikely(p_atomic_inc_return(&bo->base.reference.count) == 1)) { + p_atomic_dec(&bo->base.reference.count); + assert(p_atomic_read(&bo->base.reference.count) == 0); + return false; + } + + return true; +} + struct radeon_bo_va_hole { struct list_head list; uint64_t offset; @@ -1184,13 +1196,8 @@ static struct pb_buffer_lean *radeon_winsys_bo_from_handle(struct radeon_winsys } if (bo) { - /* Increase the refcount. */ - if (unlikely(p_atomic_inc_return(&bo->base.reference.count) == 1)) { - p_atomic_dec(&bo->base.reference.count); - assert(p_atomic_read(&bo->base.reference.count) == 0); - } else { + if (radeon_bo_ref_existing(bo)) goto done; - } } /* There isn't, create a new one. */