drm/ttm: move last binding into the drivers.
authorDave Airlie <airlied@redhat.com>
Tue, 20 Oct 2020 01:03:19 +0000 (11:03 +1000)
committerDave Airlie <airlied@redhat.com>
Wed, 21 Oct 2020 03:46:07 +0000 (13:46 +1000)
This moves the call to tt binding into the driver move,
and drops the driver callback.

Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20201020010319.1692445-8-airlied@gmail.com
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
drivers/gpu/drm/nouveau/nouveau_bo.c
drivers/gpu/drm/qxl/qxl_ttm.c
drivers/gpu/drm/radeon/radeon_ttm.c
drivers/gpu/drm/ttm/ttm_bo.c
drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
include/drm/ttm/ttm_bo_driver.h

index fba8ada99b0e38704ded81094e7b96bd4c80d52a..87e10a212b8a514e2828f583da8c2d591054e3b0 100644 (file)
@@ -666,6 +666,12 @@ static int amdgpu_bo_move(struct ttm_buffer_object *bo, bool evict,
        struct ttm_resource *old_mem = &bo->mem;
        int r;
 
+       if (new_mem->mem_type == TTM_PL_TT) {
+               r = amdgpu_ttm_backend_bind(bo->bdev, bo->ttm, new_mem);
+               if (r)
+                       return r;
+       }
+
        amdgpu_bo_move_notify(bo, evict, new_mem);
 
        /* Can't move a pinned BO */
@@ -1728,7 +1734,6 @@ static struct ttm_bo_driver amdgpu_bo_driver = {
        .ttm_tt_create = &amdgpu_ttm_tt_create,
        .ttm_tt_populate = &amdgpu_ttm_tt_populate,
        .ttm_tt_unpopulate = &amdgpu_ttm_tt_unpopulate,
-       .ttm_tt_bind = &amdgpu_ttm_backend_bind,
        .ttm_tt_destroy = &amdgpu_ttm_backend_destroy,
        .eviction_valuable = amdgpu_ttm_bo_eviction_valuable,
        .evict_flags = &amdgpu_evict_flags,
index ecd16847fbd80768416d2d393cce1c4656549d80..70b6f3b1ae85afcd901b2790ff06f8ca520b93af 100644 (file)
@@ -1032,6 +1032,12 @@ nouveau_bo_move(struct ttm_buffer_object *bo, bool evict,
        struct nouveau_drm_tile *new_tile = NULL;
        int ret = 0;
 
+       if (new_reg->mem_type == TTM_PL_TT) {
+               ret = nouveau_ttm_tt_bind(bo->bdev, bo->ttm, new_reg);
+               if (ret)
+                       return ret;
+       }
+
        nouveau_bo_move_ntfy(bo, evict, new_reg);
        ret = ttm_bo_wait_ctx(bo, ctx);
        if (ret)
@@ -1399,7 +1405,6 @@ struct ttm_bo_driver nouveau_bo_driver = {
        .ttm_tt_create = &nouveau_ttm_tt_create,
        .ttm_tt_populate = &nouveau_ttm_tt_populate,
        .ttm_tt_unpopulate = &nouveau_ttm_tt_unpopulate,
-       .ttm_tt_bind = &nouveau_ttm_tt_bind,
        .ttm_tt_destroy = &nouveau_ttm_tt_destroy,
        .eviction_valuable = ttm_bo_eviction_valuable,
        .evict_flags = nouveau_bo_evict_flags,
index a6149e3cc3d20a4ad00d70fd23c506a0a08783d6..1cc3c14bc684c88bd557b9b72352bcd7a1a819d0 100644 (file)
@@ -100,19 +100,6 @@ int qxl_ttm_io_mem_reserve(struct ttm_bo_device *bdev,
 /*
  * TTM backend functions.
  */
-
-static int qxl_ttm_backend_bind(struct ttm_bo_device *bdev,
-                               struct ttm_tt *ttm,
-                               struct ttm_resource *bo_mem)
-{
-       if (!ttm->num_pages) {
-               WARN(1, "nothing to bind %lu pages for mreg %p back %p!\n",
-                    ttm->num_pages, bo_mem, ttm);
-       }
-       /* Not implemented */
-       return -1;
-}
-
 static void qxl_ttm_backend_destroy(struct ttm_bo_device *bdev,
                                    struct ttm_tt *ttm)
 {
@@ -181,7 +168,6 @@ out:
 
 static struct ttm_bo_driver qxl_bo_driver = {
        .ttm_tt_create = &qxl_ttm_tt_create,
-       .ttm_tt_bind = &qxl_ttm_backend_bind,
        .ttm_tt_destroy = &qxl_ttm_backend_destroy,
        .eviction_valuable = ttm_bo_eviction_valuable,
        .evict_flags = &qxl_evict_flags,
index e9c95ef0859b5b1f86860986a31b976d9f63a3b9..cd454e5c802f194f0beb70546424603e4b66bfd9 100644 (file)
@@ -311,6 +311,11 @@ static int radeon_bo_move(struct ttm_buffer_object *bo, bool evict,
        struct ttm_resource *old_mem = &bo->mem;
        int r;
 
+       if (new_mem->mem_type == TTM_PL_TT) {
+               r = radeon_ttm_tt_bind(bo->bdev, bo->ttm, new_mem);
+               if (r)
+                       return r;
+       }
        radeon_bo_move_notify(bo, evict, new_mem);
 
        r = ttm_bo_wait_ctx(bo, ctx);
@@ -823,7 +828,6 @@ static struct ttm_bo_driver radeon_bo_driver = {
        .ttm_tt_create = &radeon_ttm_tt_create,
        .ttm_tt_populate = &radeon_ttm_tt_populate,
        .ttm_tt_unpopulate = &radeon_ttm_tt_unpopulate,
-       .ttm_tt_bind = &radeon_ttm_tt_bind,
        .ttm_tt_destroy = &radeon_ttm_tt_destroy,
        .eviction_valuable = ttm_bo_eviction_valuable,
        .evict_flags = &radeon_evict_flags,
index cd9c2bb183f4ed6ef833dd269ef74db9cf4547ac..2b578012cdeff1d3d48f11b06321a20ab5e24a83 100644 (file)
@@ -256,10 +256,6 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
                        ret = ttm_tt_populate(bo->bdev, bo->ttm, ctx);
                        if (ret)
                                goto out_err;
-
-                       ret = bdev->driver->ttm_tt_bind(bo->bdev, bo->ttm, mem);
-                       if (ret)
-                               goto out_err;
                }
        }
 
index fd82c9ba2d7737175a9916d031a511dd007dbc13..de25cf016be23c2a443863f6666d4a04cafedf9f 100644 (file)
@@ -737,6 +737,12 @@ static int vmw_move(struct ttm_buffer_object *bo,
        struct ttm_resource_manager *new_man = ttm_manager_type(bo->bdev, new_mem->mem_type);
        int ret;
 
+       if (new_man->use_tt && new_mem->mem_type != TTM_PL_SYSTEM) {
+               ret = vmw_ttm_bind(bo->bdev, bo->ttm, new_mem);
+               if (ret)
+                       return ret;
+       }
+
        vmw_move_notify(bo, evict, new_mem);
 
        if (old_man->use_tt && new_man->use_tt) {
@@ -769,7 +775,6 @@ struct ttm_bo_driver vmw_bo_driver = {
        .ttm_tt_create = &vmw_ttm_tt_create,
        .ttm_tt_populate = &vmw_ttm_populate,
        .ttm_tt_unpopulate = &vmw_ttm_unpopulate,
-       .ttm_tt_bind = &vmw_ttm_bind,
        .ttm_tt_destroy = &vmw_ttm_destroy,
        .eviction_valuable = ttm_bo_eviction_valuable,
        .evict_flags = vmw_evict_flags,
index 0c4efc169f46b326c43a273db90d97028484ef0c..72f106b335e94555888c433e96f769964ba6d810 100644 (file)
@@ -90,20 +90,6 @@ struct ttm_bo_driver {
         */
        void (*ttm_tt_unpopulate)(struct ttm_bo_device *bdev, struct ttm_tt *ttm);
 
-       /**
-        * ttm_tt_bind
-        *
-        * @bdev: Pointer to a ttm device
-        * @ttm: Pointer to a struct ttm_tt.
-        * @bo_mem: Pointer to a struct ttm_resource describing the
-        * memory type and location for binding.
-        *
-        * Bind the backend pages into the aperture in the location
-        * indicated by @bo_mem. This function should be able to handle
-        * differences between aperture and system page sizes.
-        */
-       int (*ttm_tt_bind)(struct ttm_bo_device *bdev, struct ttm_tt *ttm, struct ttm_resource *bo_mem);
-
        /**
         * ttm_tt_destroy
         *