Commit 05d1c761 authored by Thomas Hellström's avatar Thomas Hellström
Browse files

drm/i915/ttm: Move the i915_gem_obj_copy_ttm() function



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: default avatarThomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20211122214554.371864-3-thomas.hellstrom@linux.intel.com
parent f6c466b8
Loading
Loading
Loading
Loading
+0 −47
Original line number Diff line number Diff line
@@ -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;
}
+0 −4
Original line number Diff line number Diff line
@@ -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
+51 −12
Original line number Diff line number Diff line
@@ -378,17 +378,9 @@ 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,
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;
@@ -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;
}
+4 −6
Original line number Diff line number Diff line
@@ -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,
+1 −0
Original line number Diff line number Diff line
@@ -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"

/**