drm/ttm: individualize resv objects before calling release_notify
authorChristian König <christian.koenig@amd.com>
Mon, 10 Feb 2020 12:04:25 +0000 (13:04 +0100)
committerChristian König <christian.koenig@amd.com>
Wed, 12 Feb 2020 12:03:56 +0000 (13:03 +0100)
This allows release_notify to add and remove fences from deleted objects.

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: xinhui pan <xinhui.pan@amd.com>
Link: https://patchwork.freedesktop.org/patch/352750/
drivers/gpu/drm/ttm/ttm_bo.c

index 6688599def4b02c4b0b486cc1e280eab51061a02..151edfd8de77ee1f4acf2e2e41e060f8339650a2 100644 (file)
@@ -572,14 +572,6 @@ static void ttm_bo_release(struct kref *kref)
        int ret;
 
        if (!bo->deleted) {
-               if (bo->bdev->driver->release_notify)
-                       bo->bdev->driver->release_notify(bo);
-
-               drm_vma_offset_remove(bdev->vma_manager, &bo->base.vma_node);
-               ttm_mem_io_lock(man, false);
-               ttm_mem_io_free_vm(bo);
-               ttm_mem_io_unlock(man);
-
                ret = ttm_bo_individualize_resv(bo);
                if (ret) {
                        /* Last resort, if we fail to allocate memory for the
@@ -588,6 +580,14 @@ static void ttm_bo_release(struct kref *kref)
                        dma_resv_wait_timeout_rcu(bo->base.resv, true, false,
                                                  30 * HZ);
                }
+
+               if (bo->bdev->driver->release_notify)
+                       bo->bdev->driver->release_notify(bo);
+
+               drm_vma_offset_remove(bdev->vma_manager, &bo->base.vma_node);
+               ttm_mem_io_lock(man, false);
+               ttm_mem_io_free_vm(bo);
+               ttm_mem_io_unlock(man);
        }
 
        if (!dma_resv_test_signaled_rcu(bo->base.resv, true)) {