Mesa (master): panfrost: Add a sparse array to map GEM handles to BOs

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Jul 13 14:59:52 UTC 2020


Module: Mesa
Branch: master
Commit: 169dbb5b08a1c5367dd7a1714cd547a7f3ecac3d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=169dbb5b08a1c5367dd7a1714cd547a7f3ecac3d

Author: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Date:   Mon May 25 19:48:30 2020 -0400

panfrost: Add a sparse array to map GEM handles to BOs

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5859>

---

 src/panfrost/encoder/pan_device.h | 11 +++++++++++
 src/panfrost/encoder/pan_props.c  |  3 +++
 2 files changed, 14 insertions(+)

diff --git a/src/panfrost/encoder/pan_device.h b/src/panfrost/encoder/pan_device.h
index 693c156f2e3..d8d1e035cb8 100644
--- a/src/panfrost/encoder/pan_device.h
+++ b/src/panfrost/encoder/pan_device.h
@@ -2,6 +2,7 @@
  *
  * Copyright 2018-2019 Alyssa Rosenzweig
  * Copyright 2018-2019 Collabora, Ltd.
+ * Copyright © 2015 Intel Corporation
  * All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
@@ -35,6 +36,7 @@
 #include "util/bitset.h"
 #include "util/set.h"
 #include "util/list.h"
+#include "util/sparse_array.h"
 
 #include <panfrost-misc.h>
 
@@ -89,6 +91,9 @@ struct panfrost_device {
         pthread_mutex_t active_bos_lock;
         struct set *active_bos;
 
+        pthread_mutex_t bo_map_lock;
+        struct util_sparse_array bo_map;
+
         struct {
                 pthread_mutex_t lock;
 
@@ -113,4 +118,10 @@ panfrost_open_device(void *memctx, int fd, struct panfrost_device *dev);
 void
 panfrost_close_device(struct panfrost_device *dev);
 
+static inline struct panfrost_bo *
+pan_lookup_bo(struct panfrost_device *dev, uint32_t gem_handle)
+{
+        return util_sparse_array_get(&dev->bo_map, gem_handle);
+}
+
 #endif
diff --git a/src/panfrost/encoder/pan_props.c b/src/panfrost/encoder/pan_props.c
index d505a111e7e..d0fadc9a55b 100644
--- a/src/panfrost/encoder/pan_props.c
+++ b/src/panfrost/encoder/pan_props.c
@@ -145,6 +145,8 @@ panfrost_open_device(void *memctx, int fd, struct panfrost_device *dev)
         dev->active_bos = _mesa_set_create(memctx,
                         panfrost_active_bos_hash, panfrost_active_bos_cmp);
 
+        util_sparse_array_init(&dev->bo_map, sizeof(struct panfrost_bo), 512);
+
         pthread_mutex_init(&dev->bo_cache.lock, NULL);
         list_inithead(&dev->bo_cache.lru);
 
@@ -159,5 +161,6 @@ panfrost_close_device(struct panfrost_device *dev)
         pthread_mutex_destroy(&dev->bo_cache.lock);
         pthread_mutex_destroy(&dev->active_bos_lock);
         drmFreeVersion(dev->kernel_version);
+        util_sparse_array_finish(&dev->bo_map);
 
 }



More information about the mesa-commit mailing list