etnaviv/drm: add some locking asserts
authorChristian Gmeiner <christian.gmeiner@gmail.com>
Mon, 30 Nov 2020 08:55:39 +0000 (09:55 +0100)
committerMarge Bot <eric+marge@anholt.net>
Tue, 1 Dec 2020 12:20:45 +0000 (12:20 +0000)
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Reviewed-by: Lucas Stach <l.stach@pengutronix.de>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7832>

src/etnaviv/drm/etnaviv_bo.c
src/etnaviv/drm/etnaviv_bo_cache.c
src/etnaviv/drm/etnaviv_cmd_stream.c
src/etnaviv/drm/etnaviv_device.c

index 8c258f2b56550a4c0eac1b8cb009d44e0cd13930..86c0e9afb4f93972cfa9241e22a96a6d38ec3272 100644 (file)
@@ -36,6 +36,8 @@ void _etna_bo_del(struct etna_bo *bo);
 /* set buffer name, and add to table, call w/ etna_drm_table_lock held: */
 static void set_name(struct etna_bo *bo, uint32_t name)
 {
+       simple_mtx_assert_locked(&etna_drm_table_lock);
+
        bo->name = name;
        /* add ourself into the name table: */
        _mesa_hash_table_insert(bo->dev->name_table, &bo->name, bo);
@@ -46,6 +48,8 @@ void _etna_bo_del(struct etna_bo *bo)
 {
        VG_BO_FREE(bo);
 
+       simple_mtx_assert_locked(&etna_drm_table_lock);
+
        if (bo->va)
                util_vma_heap_free(&bo->dev->address_space, bo->va, bo->size);
 
@@ -71,7 +75,11 @@ void _etna_bo_del(struct etna_bo *bo)
 static struct etna_bo *lookup_bo(void *tbl, uint32_t handle)
 {
        struct etna_bo *bo = NULL;
-       struct hash_entry *entry = _mesa_hash_table_search(tbl, &handle);
+       struct hash_entry *entry;
+
+       simple_mtx_assert_locked(&etna_drm_table_lock);
+
+       entry = _mesa_hash_table_search(tbl, &handle);
 
        if (entry) {
                /* found, incr refcnt and return: */
@@ -90,6 +98,8 @@ static struct etna_bo *bo_from_handle(struct etna_device *dev,
 {
        struct etna_bo *bo = calloc(sizeof(*bo), 1);
 
+       simple_mtx_assert_locked(&etna_drm_table_lock);
+
        if (!bo) {
                struct drm_gem_close req = {
                        .handle = handle,
index e99cf46399d4eeed5566c350a743d5ab6c0ae469..91fb17383c4924732747cbca9a642d1bc678a0a3 100644 (file)
@@ -181,7 +181,11 @@ struct etna_bo *etna_bo_cache_alloc(struct etna_bo_cache *cache, uint32_t *size,
 
 int etna_bo_cache_free(struct etna_bo_cache *cache, struct etna_bo *bo)
 {
-       struct etna_bo_bucket *bucket = get_bucket(cache, bo->size);
+       struct etna_bo_bucket *bucket;
+
+       simple_mtx_assert_locked(&etna_drm_table_lock);
+
+       bucket = get_bucket(cache, bo->size);
 
        /* see if we can be green and recycle: */
        if (bucket) {
index 5555efb3e7eaf5226eff2b2dc19ef41ef5d63fa2..0ddf47239c568120cd7e81b57507b2424a2a279f 100644 (file)
@@ -154,6 +154,8 @@ static uint32_t append_bo(struct etna_cmd_stream *stream, struct etna_bo *bo)
        struct etna_cmd_stream_priv *priv = etna_cmd_stream_priv(stream);
        uint32_t idx;
 
+       simple_mtx_assert_locked(&idx_lock);
+
        idx = APPEND(&priv->submit, bos);
        idx = APPEND(priv, bos);
 
index 2f2f9211467d5fd52a4b03c87e04f04ef92e93d2..87a3e36faf1385da5faa0cc41727fb222895582d 100644 (file)
@@ -98,6 +98,8 @@ static void etna_device_del_impl(struct etna_device *dev)
 
 void etna_device_del_locked(struct etna_device *dev)
 {
+       simple_mtx_assert_locked(&etna_drm_table_lock);
+
        if (!p_atomic_dec_zero(&dev->refcnt))
                return;