Module: Mesa Branch: amdgpu Commit: 8380f7fcb9057a6f99160a3f4bcf3fec7b3ab773 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8380f7fcb9057a6f99160a3f4bcf3fec7b3ab773
Author: Marek Olšák <[email protected]> Date: Thu Jun 4 12:50:55 2015 +0200 winsys/amdgpu: don't use KMS handles as reloc hash keys Reviewed-by: Christian König <[email protected]> --- src/gallium/winsys/amdgpu/drm/amdgpu_bo.c | 21 +++------------------ src/gallium/winsys/amdgpu/drm/amdgpu_bo.h | 2 +- src/gallium/winsys/amdgpu/drm/amdgpu_cs.c | 4 ++-- src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h | 1 + 4 files changed, 7 insertions(+), 21 deletions(-) diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c index b274536..02e0c07 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c @@ -292,12 +292,7 @@ static struct pb_buffer *amdgpu_bomgr_create_bo(struct pb_manager *_mgr, bo->bo = result.buf_handle; bo->va = result.virtual_mc_base_address; bo->initial_domain = rdesc->initial_domain; - - if (amdgpu_bo_export(bo->bo, amdgpu_bo_handle_type_kms, &bo->handle)) { - amdgpu_bo_free(bo->bo); - FREE(bo); - return NULL; - } + bo->unique_id = __sync_fetch_and_add(&rws->next_bo_unique_id, 1); if (rdesc->initial_domain & RADEON_DOMAIN_VRAM) rws->allocated_vram += align(size, 4096); @@ -573,12 +568,7 @@ static struct pb_buffer *amdgpu_bo_from_handle(struct radeon_winsys *rws, bo->rws = ws; bo->va = result.virtual_mc_base_address; bo->initial_domain = initial; - - if (amdgpu_bo_export(bo->bo, amdgpu_bo_handle_type_kms, &bo->handle)) { - amdgpu_bo_free(bo->bo); - FREE(bo); - return NULL; - } + bo->unique_id = __sync_fetch_and_add(&ws->next_bo_unique_id, 1); if (stride) *stride = whandle->stride; @@ -648,12 +638,7 @@ static struct pb_buffer *amdgpu_bo_from_ptr(struct radeon_winsys *rws, bo->user_ptr = pointer; bo->va = result.virtual_mc_base_address; bo->initial_domain = RADEON_DOMAIN_GTT; - - if (amdgpu_bo_export(bo->bo, amdgpu_bo_handle_type_kms, &bo->handle)) { - amdgpu_bo_free(bo->bo); - FREE(bo); - return NULL; - } + bo->unique_id = __sync_fetch_and_add(&ws->next_bo_unique_id, 1); ws->allocated_gtt += align(bo->base.size, 4096); diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.h b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.h index 77c0520..6b03afd 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.h +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.h @@ -50,7 +50,7 @@ struct amdgpu_winsys_bo { void *user_ptr; /* from buffer_from_ptr */ amdgpu_bo_handle bo; - uint32_t handle; + uint32_t unique_id; uint64_t va; enum radeon_bo_domain initial_domain; diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c index 1fda66f..6e15f83 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c @@ -335,7 +335,7 @@ amdgpu_cs_create(struct radeon_winsys_ctx *rwctx, int amdgpu_get_reloc(struct amdgpu_cs_context *csc, struct amdgpu_winsys_bo *bo) { - unsigned hash = bo->handle & (Elements(csc->buffer_indices_hashlist)-1); + unsigned hash = bo->unique_id & (Elements(csc->buffer_indices_hashlist)-1); int i = csc->buffer_indices_hashlist[hash]; /* not found or found */ @@ -370,7 +370,7 @@ static unsigned amdgpu_add_reloc(struct amdgpu_cs *cs, { struct amdgpu_cs_context *csc = cs->csc; struct amdgpu_cs_buffer *reloc; - unsigned hash = bo->handle & (Elements(csc->buffer_indices_hashlist)-1); + unsigned hash = bo->unique_id & (Elements(csc->buffer_indices_hashlist)-1); int i = -1; priority = MIN2(priority, 15); diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h index cc475d0..195fb15 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h @@ -47,6 +47,7 @@ struct amdgpu_winsys { amdgpu_device_handle dev; int num_cs; /* The number of command streams created. */ + uint32_t next_bo_unique_id; uint64_t allocated_vram; uint64_t allocated_gtt; uint64_t buffer_wait_time; /* time spent in buffer_wait in ns */ _______________________________________________ mesa-commit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-commit
