Mesa (amdgpu): winsys/amdgpu: don't use KMS handles as reloc hash keys
Alex Deucher
agd5f at kemper.freedesktop.org
Fri Jun 5 15:33:59 UTC 2015
Module: Mesa
Branch: amdgpu
Commit: 8380f7fcb9057a6f99160a3f4bcf3fec7b3ab773
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8380f7fcb9057a6f99160a3f4bcf3fec7b3ab773
Author: Marek Olšák <marek.olsak at amd.com>
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 <christian.koenig at amd.com>
---
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 */
More information about the mesa-commit
mailing list