From 2200d674e4b6b6fdafb30455e350a503d01088c6 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Fri, 18 Mar 2022 14:34:21 -0700 Subject: [PATCH] freedreno/drm: Reorder device destroy Call backend specific cleanup fxn earlier. This is needed if the backend has things like bo's to delete, otherwise the handle_table will already be destroyed causing problems in bo_del() Signed-off-by: Rob Clark Part-of: --- src/freedreno/drm/freedreno_device.c | 13 ++++++++----- src/freedreno/drm/msm/msm_device.c | 2 -- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/freedreno/drm/freedreno_device.c b/src/freedreno/drm/freedreno_device.c index 21bee70be78..e3d9e249a0b 100644 --- a/src/freedreno/drm/freedreno_device.c +++ b/src/freedreno/drm/freedreno_device.c @@ -139,12 +139,12 @@ fd_device_purge(struct fd_device *dev) static void fd_device_del_impl(struct fd_device *dev) { - int close_fd = dev->closefd ? dev->fd : -1; - simple_mtx_assert_locked(&table_lock); assert(list_is_empty(&dev->deferred_submits)); + dev->funcs->destroy(dev); + if (dev->suballoc_bo) fd_bo_del_locked(dev->suballoc_bo); @@ -152,11 +152,14 @@ fd_device_del_impl(struct fd_device *dev) fd_bo_cache_cleanup(&dev->ring_cache, 0); _mesa_hash_table_destroy(dev->handle_table, NULL); _mesa_hash_table_destroy(dev->name_table, NULL); + if (util_queue_is_initialized(&dev->submit_queue)) util_queue_destroy(&dev->submit_queue); - dev->funcs->destroy(dev); - if (close_fd >= 0) - close(close_fd); + + if (dev->closefd) + close(dev->fd); + + free(dev); } void diff --git a/src/freedreno/drm/msm/msm_device.c b/src/freedreno/drm/msm/msm_device.c index dcb11fd8411..c330c8be565 100644 --- a/src/freedreno/drm/msm/msm_device.c +++ b/src/freedreno/drm/msm/msm_device.c @@ -33,8 +33,6 @@ static void msm_device_destroy(struct fd_device *dev) { - struct msm_device *msm_dev = to_msm_device(dev); - free(msm_dev); } static const struct fd_device_funcs funcs = {