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