winsys/radeon: do not cast bo->va as void*
authorPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Fri, 5 Jun 2020 12:40:01 +0000 (14:40 +0200)
committerPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Tue, 9 Jun 2020 09:28:16 +0000 (11:28 +0200)
Using a util_hash_table_create_ptr_keys to store bo->va address doesn't
work on 32 bits.
This commit makes radeon_drm_winsys::bo_vas a hash_table_u64 instead.

Tested by Miklós Máté.

CC: 20.1 <mesa-stable@lists.freedesktop.org>
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3056
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5380>

src/gallium/winsys/radeon/drm/radeon_drm_bo.c
src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
src/gallium/winsys/radeon/drm/radeon_drm_winsys.h

index 948e0b20ce32576091e81bc538003cffb0535d1a..f432b9bfe0113886ec78e017c3e9c4a7d159c4cd 100644 (file)
@@ -718,14 +718,14 @@ static struct radeon_bo *radeon_create_bo(struct radeon_drm_winsys *rws,
       if (va.operation == RADEON_VA_RESULT_VA_EXIST) {
          struct pb_buffer *b = &bo->base;
          struct radeon_bo *old_bo =
-               util_hash_table_get(rws->bo_vas, (void*)(uintptr_t)va.offset);
+               _mesa_hash_table_u64_search(rws->bo_vas, va.offset);
 
          mtx_unlock(&rws->bo_handles_mutex);
          pb_reference(&b, &old_bo->base);
          return radeon_bo(b);
       }
 
-      _mesa_hash_table_insert(rws->bo_vas, (void*)(uintptr_t)bo->va, bo);
+      _mesa_hash_table_u64_insert(rws->bo_vas, bo->va, bo);
       mtx_unlock(&rws->bo_handles_mutex);
    }
 
@@ -1164,14 +1164,14 @@ static struct pb_buffer *radeon_winsys_bo_from_ptr(struct radeon_winsys *rws,
       if (va.operation == RADEON_VA_RESULT_VA_EXIST) {
          struct pb_buffer *b = &bo->base;
          struct radeon_bo *old_bo =
-               util_hash_table_get(ws->bo_vas, (void*)(uintptr_t)va.offset);
+               _mesa_hash_table_u64_search(ws->bo_vas, va.offset);
 
          mtx_unlock(&ws->bo_handles_mutex);
          pb_reference(&b, &old_bo->base);
          return b;
       }
 
-      _mesa_hash_table_insert(ws->bo_vas, (void*)(uintptr_t)bo->va, bo);
+      _mesa_hash_table_u64_insert(ws->bo_vas, bo->va, bo);
       mtx_unlock(&ws->bo_handles_mutex);
    }
 
@@ -1295,14 +1295,14 @@ done:
       if (va.operation == RADEON_VA_RESULT_VA_EXIST) {
          struct pb_buffer *b = &bo->base;
          struct radeon_bo *old_bo =
-               util_hash_table_get(ws->bo_vas, (void*)(uintptr_t)va.offset);
+               _mesa_hash_table_u64_search(ws->bo_vas, va.offset);
 
          mtx_unlock(&ws->bo_handles_mutex);
          pb_reference(&b, &old_bo->base);
          return b;
       }
 
-      _mesa_hash_table_insert(ws->bo_vas, (void*)(uintptr_t)bo->va, bo);
+      _mesa_hash_table_u64_insert(ws->bo_vas, bo->va, bo);
       mtx_unlock(&ws->bo_handles_mutex);
    }
 
index 5f52fda52dc25b19c12ca098963029fdf0498c43..f2ed0d725d4d3e0178441c1b253f1e0b2826edb9 100644 (file)
@@ -628,7 +628,7 @@ static void radeon_winsys_destroy(struct radeon_winsys *rws)
 
    _mesa_hash_table_destroy(ws->bo_names, NULL);
    _mesa_hash_table_destroy(ws->bo_handles, NULL);
-   _mesa_hash_table_destroy(ws->bo_vas, NULL);
+   _mesa_hash_table_u64_destroy(ws->bo_vas, NULL);
    mtx_destroy(&ws->bo_handles_mutex);
    mtx_destroy(&ws->vm32.mutex);
    mtx_destroy(&ws->vm64.mutex);
@@ -900,7 +900,7 @@ radeon_drm_winsys_create(int fd, const struct pipe_screen_config *config,
 
    ws->bo_names = util_hash_table_create_ptr_keys();
    ws->bo_handles = util_hash_table_create_ptr_keys();
-   ws->bo_vas = util_hash_table_create_ptr_keys();
+   ws->bo_vas = _mesa_hash_table_u64_create(NULL);
    (void) mtx_init(&ws->bo_handles_mutex, mtx_plain);
    (void) mtx_init(&ws->vm32.mutex, mtx_plain);
    (void) mtx_init(&ws->vm64.mutex, mtx_plain);
index a45478f42443da14fb744726ba3ac8ce0208f239..da166192f95fcad5f3afa8e24f29369271d0f5ce 100644 (file)
@@ -78,10 +78,10 @@ struct radeon_drm_winsys {
 
    /* List of buffer GEM names. Protected by bo_handles_mutex. */
    struct hash_table *bo_names;
-   /* List of buffer handles. Protectded by bo_handles_mutex. */
+   /* List of buffer handles. Protected by bo_handles_mutex. */
    struct hash_table *bo_handles;
-   /* List of buffer virtual memory ranges. Protectded by bo_handles_mutex. */
-   struct hash_table *bo_vas;
+   /* List of buffer virtual memory ranges. Protected by bo_handles_mutex. */
+   struct hash_table_u64 *bo_vas;
    mtx_t bo_handles_mutex;
    mtx_t bo_fence_lock;