drm/ttm: split out the move to system from move ttm code
authorDave Airlie <airlied@redhat.com>
Mon, 19 Oct 2020 07:13:11 +0000 (17:13 +1000)
committerDave Airlie <airlied@redhat.com>
Mon, 19 Oct 2020 19:03:53 +0000 (05:03 +1000)
Reviewed-by: Ben Skeggs <bskeggs@redhat.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20201019071314.1671485-3-airlied@gmail.com
drivers/gpu/drm/ttm/ttm_bo_util.c

index a36c615bdf243dab9ec494ffab65b401f5e90225..4a461226b6bad4caff310dff42624d1de4551a95 100644 (file)
@@ -65,27 +65,38 @@ int ttm_bo_move_to_new_tt_mem(struct ttm_buffer_object *bo,
        return 0;
 }
 
-int ttm_bo_move_ttm(struct ttm_buffer_object *bo,
-                  struct ttm_operation_ctx *ctx,
-                   struct ttm_resource *new_mem)
+static int ttm_bo_move_to_system(struct ttm_buffer_object *bo,
+                                struct ttm_operation_ctx *ctx)
 {
        struct ttm_resource *old_mem = &bo->mem;
        int ret;
 
-       if (old_mem->mem_type != TTM_PL_SYSTEM) {
-               ret = ttm_bo_wait_ctx(bo, ctx);
-
-               if (unlikely(ret != 0)) {
-                       if (ret != -ERESTARTSYS)
-                               pr_err("Failed to expire sync object before unbinding TTM\n");
-                       return ret;
-               }
+       if (old_mem->mem_type == TTM_PL_SYSTEM)
+               return 0;
 
-               ttm_bo_tt_unbind(bo);
-               ttm_resource_free(bo, &bo->mem);
-               old_mem->mem_type = TTM_PL_SYSTEM;
+       ret = ttm_bo_wait_ctx(bo, ctx);
+       if (unlikely(ret != 0)) {
+               if (ret != -ERESTARTSYS)
+                       pr_err("Failed to expire sync object before unbinding TTM\n");
+               return ret;
        }
 
+       ttm_bo_tt_unbind(bo);
+       ttm_resource_free(bo, &bo->mem);
+       old_mem->mem_type = TTM_PL_SYSTEM;
+       return 0;
+}
+
+int ttm_bo_move_ttm(struct ttm_buffer_object *bo,
+                  struct ttm_operation_ctx *ctx,
+                   struct ttm_resource *new_mem)
+{
+       int ret;
+
+       ret = ttm_bo_move_to_system(bo, ctx);
+       if (unlikely(ret != 0))
+               return ret;
+
        ret = ttm_bo_move_to_new_tt_mem(bo, ctx, new_mem);
        if (unlikely(ret != 0))
                return ret;