From: Christian König Date: Mon, 10 Feb 2020 12:04:25 +0000 (+0100) Subject: drm/ttm: individualize resv objects before calling release_notify X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=f704ff7c3d2d97e26a409423e820fb0963cc8de1;p=openwrt%2Fstaging%2Fblogic.git drm/ttm: individualize resv objects before calling release_notify This allows release_notify to add and remove fences from deleted objects. Signed-off-by: Christian König Reviewed-by: xinhui pan Link: https://patchwork.freedesktop.org/patch/352750/ --- diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index 6688599def4b..151edfd8de77 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -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)) {