drm/nouveau: stop using ttm_bo_wait
authorChristian König <christian.koenig@amd.com>
Mon, 9 May 2022 08:45:40 +0000 (10:45 +0200)
committerChristian König <christian.koenig@amd.com>
Wed, 18 Jan 2023 14:57:52 +0000 (15:57 +0100)
TTM is just wrapping core DMA functionality here, remove the mid-layer.
No functional change.

Signed-off-by: Christian König <christian.koenig@amd.com>
Acked-by: Karol Herbst <kherbst@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20221125102137.1801-5-christian.koenig@amd.com
drivers/gpu/drm/nouveau/nouveau_bo.c
drivers/gpu/drm/nouveau/nouveau_gem.c

index 335fa91..288eebc 100644 (file)
@@ -922,6 +922,7 @@ static void nouveau_bo_move_ntfy(struct ttm_buffer_object *bo,
        struct nouveau_mem *mem = new_reg ? nouveau_mem(new_reg) : NULL;
        struct nouveau_bo *nvbo = nouveau_bo(bo);
        struct nouveau_vma *vma;
+       long ret;
 
        /* ttm can now (stupidly) pass the driver bos it didn't create... */
        if (bo->destroy != nouveau_bo_del_ttm)
@@ -936,7 +937,10 @@ static void nouveau_bo_move_ntfy(struct ttm_buffer_object *bo,
                }
        } else {
                list_for_each_entry(vma, &nvbo->vma_list, head) {
-                       WARN_ON(ttm_bo_wait(bo, false, false));
+                       ret = dma_resv_wait_timeout(bo->base.resv,
+                                                   DMA_RESV_USAGE_BOOKKEEP,
+                                                   false, 15 * HZ);
+                       WARN_ON(ret <= 0);
                        nouveau_vma_unmap(vma);
                }
        }
index ac5793c..f77e449 100644 (file)
@@ -645,7 +645,7 @@ nouveau_gem_pushbuf_reloc_apply(struct nouveau_cli *cli,
                                struct drm_nouveau_gem_pushbuf_reloc *reloc,
                                struct drm_nouveau_gem_pushbuf_bo *bo)
 {
-       int ret = 0;
+       long ret = 0;
        unsigned i;
 
        for (i = 0; i < req->nr_relocs; i++) {
@@ -703,9 +703,14 @@ nouveau_gem_pushbuf_reloc_apply(struct nouveau_cli *cli,
                                data |= r->vor;
                }
 
-               ret = ttm_bo_wait(&nvbo->bo, false, false);
+               ret = dma_resv_wait_timeout(nvbo->bo.base.resv,
+                                           DMA_RESV_USAGE_BOOKKEEP,
+                                           false, 15 * HZ);
+               if (ret == 0)
+                       ret = -EBUSY;
                if (ret) {
-                       NV_PRINTK(err, cli, "reloc wait_idle failed: %d\n", ret);
+                       NV_PRINTK(err, cli, "reloc wait_idle failed: %ld\n",
+                                 ret);
                        break;
                }