drm/i915/ttm: Move the i915_gem_obj_copy_ttm() function
authorThomas Hellström <thomas.hellstrom@linux.intel.com>
Mon, 22 Nov 2021 21:45:50 +0000 (22:45 +0100)
committerThomas Hellström <thomas.hellstrom@linux.intel.com>
Thu, 25 Nov 2021 08:36:15 +0000 (09:36 +0100)
Move the i915_gem_obj_copy_ttm() function to i915_gem_ttm_move.h.
This will help keep a number of functions static when introducing
async moves.

Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20211122214554.371864-3-thomas.hellstrom@linux.intel.com
drivers/gpu/drm/i915/gem/i915_gem_ttm.c
drivers/gpu/drm/i915/gem/i915_gem_ttm.h
drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c
drivers/gpu/drm/i915/gem/i915_gem_ttm_move.h
drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c

index 02918b9..e9e78ac 100644 (file)
@@ -1063,50 +1063,3 @@ i915_gem_ttm_system_setup(struct drm_i915_private *i915,
        intel_memory_region_set_name(mr, "system-ttm");
        return mr;
 }
-
-/**
- * i915_gem_obj_copy_ttm - Copy the contents of one ttm-based gem object to
- * another
- * @dst: The destination object
- * @src: The source object
- * @allow_accel: Allow using the blitter. Otherwise TTM memcpy is used.
- * @intr: Whether to perform waits interruptible:
- *
- * Note: The caller is responsible for assuring that the underlying
- * TTM objects are populated if needed and locked.
- *
- * Return: Zero on success. Negative error code on error. If @intr == true,
- * then it may return -ERESTARTSYS or -EINTR.
- */
-int i915_gem_obj_copy_ttm(struct drm_i915_gem_object *dst,
-                         struct drm_i915_gem_object *src,
-                         bool allow_accel, bool intr)
-{
-       struct ttm_buffer_object *dst_bo = i915_gem_to_ttm(dst);
-       struct ttm_buffer_object *src_bo = i915_gem_to_ttm(src);
-       struct ttm_operation_ctx ctx = {
-               .interruptible = intr,
-       };
-       struct i915_refct_sgt *dst_rsgt;
-       int ret;
-
-       assert_object_held(dst);
-       assert_object_held(src);
-
-       /*
-        * Sync for now. This will change with async moves.
-        */
-       ret = ttm_bo_wait_ctx(dst_bo, &ctx);
-       if (!ret)
-               ret = ttm_bo_wait_ctx(src_bo, &ctx);
-       if (ret)
-               return ret;
-
-       dst_rsgt = i915_ttm_resource_get_st(dst, dst_bo->resource);
-       __i915_ttm_move(src_bo, false, dst_bo->resource, dst_bo->ttm,
-                       dst_rsgt, allow_accel);
-
-       i915_refct_sgt_put(dst_rsgt);
-
-       return 0;
-}
index 074a7c0..82cdabb 100644 (file)
@@ -49,10 +49,6 @@ int __i915_gem_ttm_object_init(struct intel_memory_region *mem,
                               resource_size_t page_size,
                               unsigned int flags);
 
-int i915_gem_obj_copy_ttm(struct drm_i915_gem_object *dst,
-                         struct drm_i915_gem_object *src,
-                         bool allow_accel, bool intr);
-
 /* Internal I915 TTM declarations and definitions below. */
 
 #define I915_PL_LMEM0 TTM_PL_PRIV
index ef22d4e..f35b386 100644 (file)
@@ -378,18 +378,10 @@ i915_ttm_memcpy_work_arm(struct i915_ttm_memcpy_work *work,
        return &work->fence;
 }
 
-/**
- * __i915_ttm_move - helper to perform TTM moves or clears.
- * @bo: The source buffer object.
- * @clear: Whether this is a clear operation.
- * @dst_mem: The destination ttm resource.
- * @dst_ttm: The destination ttm page vector.
- * @dst_rsgt: The destination refcounted sg-list.
- * @allow_accel: Whether to allow acceleration.
- */
-void __i915_ttm_move(struct ttm_buffer_object *bo, bool clear,
-                    struct ttm_resource *dst_mem, struct ttm_tt *dst_ttm,
-                    struct i915_refct_sgt *dst_rsgt, bool allow_accel)
+static void __i915_ttm_move(struct ttm_buffer_object *bo, bool clear,
+                           struct ttm_resource *dst_mem,
+                           struct ttm_tt *dst_ttm,
+                           struct i915_refct_sgt *dst_rsgt, bool allow_accel)
 {
        struct i915_ttm_memcpy_work *copy_work = NULL;
        struct i915_ttm_memcpy_arg _arg, *arg = &_arg;
@@ -521,3 +513,50 @@ int i915_ttm_move(struct ttm_buffer_object *bo, bool evict,
        i915_ttm_adjust_gem_after_move(obj);
        return 0;
 }
+
+/**
+ * i915_gem_obj_copy_ttm - Copy the contents of one ttm-based gem object to
+ * another
+ * @dst: The destination object
+ * @src: The source object
+ * @allow_accel: Allow using the blitter. Otherwise TTM memcpy is used.
+ * @intr: Whether to perform waits interruptible:
+ *
+ * Note: The caller is responsible for assuring that the underlying
+ * TTM objects are populated if needed and locked.
+ *
+ * Return: Zero on success. Negative error code on error. If @intr == true,
+ * then it may return -ERESTARTSYS or -EINTR.
+ */
+int i915_gem_obj_copy_ttm(struct drm_i915_gem_object *dst,
+                         struct drm_i915_gem_object *src,
+                         bool allow_accel, bool intr)
+{
+       struct ttm_buffer_object *dst_bo = i915_gem_to_ttm(dst);
+       struct ttm_buffer_object *src_bo = i915_gem_to_ttm(src);
+       struct ttm_operation_ctx ctx = {
+               .interruptible = intr,
+       };
+       struct i915_refct_sgt *dst_rsgt;
+       int ret;
+
+       assert_object_held(dst);
+       assert_object_held(src);
+
+       /*
+        * Sync for now. This will change with async moves.
+        */
+       ret = ttm_bo_wait_ctx(dst_bo, &ctx);
+       if (!ret)
+               ret = ttm_bo_wait_ctx(src_bo, &ctx);
+       if (ret)
+               return ret;
+
+       dst_rsgt = i915_ttm_resource_get_st(dst, dst_bo->resource);
+       __i915_ttm_move(src_bo, false, dst_bo->resource, dst_bo->ttm,
+                       dst_rsgt, allow_accel);
+
+       i915_refct_sgt_put(dst_rsgt);
+
+       return 0;
+}
index 75b87e7..d2e7f14 100644 (file)
@@ -23,13 +23,11 @@ int i915_ttm_move_notify(struct ttm_buffer_object *bo);
 I915_SELFTEST_DECLARE(void i915_ttm_migrate_set_failure_modes(bool gpu_migration,
                                                              bool work_allocation));
 
-/* Internal I915 TTM declarations and definitions below. */
+int i915_gem_obj_copy_ttm(struct drm_i915_gem_object *dst,
+                         struct drm_i915_gem_object *src,
+                         bool allow_accel, bool intr);
 
-void __i915_ttm_move(struct ttm_buffer_object *bo, bool clear,
-                    struct ttm_resource *dst_mem,
-                    struct ttm_tt *dst_ttm,
-                    struct i915_refct_sgt *dst_rsgt,
-                    bool allow_accel);
+/* Internal I915 TTM declarations and definitions below. */
 
 int i915_ttm_move(struct ttm_buffer_object *bo, bool evict,
                  struct ttm_operation_ctx *ctx,
index 3b6d14b..60d10ab 100644 (file)
@@ -12,6 +12,7 @@
 
 #include "gem/i915_gem_region.h"
 #include "gem/i915_gem_ttm.h"
+#include "gem/i915_gem_ttm_move.h"
 #include "gem/i915_gem_ttm_pm.h"
 
 /**