Commit c37d951c authored by Dave Airlie's avatar Dave Airlie
Browse files

drm/ttm: add move old to system to drivers.



Uninline ttm_bo_move_ttm. Eventually want to unhook the unbind out.

Reviewed-by: default avatarBen Skeggs <bskeggs@redhat.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20201019071314.1671485-5-airlied@gmail.com
parent a07e32bd
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -562,7 +562,11 @@ static int amdgpu_move_vram_ram(struct ttm_buffer_object *bo, bool evict,
	}

	/* move BO (in tmp_mem) to new_mem */
	r = ttm_bo_move_ttm(bo, ctx, new_mem);
	r = ttm_bo_move_to_system(bo, ctx);
	if (unlikely(r))
		goto out_cleanup;

	ttm_bo_assign_mem(bo, new_mem);
out_cleanup:
	ttm_resource_free(bo, &tmp_mem);
	return r;
@@ -672,8 +676,13 @@ static int amdgpu_bo_move(struct ttm_buffer_object *bo, bool evict,
	}

	if (old_mem->mem_type == TTM_PL_TT &&
	    new_mem->mem_type == TTM_PL_SYSTEM)
		return ttm_bo_move_ttm(bo, ctx, new_mem);
	    new_mem->mem_type == TTM_PL_SYSTEM) {
		r = ttm_bo_move_to_system(bo, ctx);
		if (r)
			return r;
		ttm_bo_assign_mem(bo, new_mem);
		return 0;
	}

	if (old_mem->mem_type == AMDGPU_PL_GDS ||
	    old_mem->mem_type == AMDGPU_PL_GWS ||
+9 −2
Original line number Diff line number Diff line
@@ -897,7 +897,11 @@ nouveau_bo_move_flipd(struct ttm_buffer_object *bo, bool evict,
	if (ret)
		goto out;

	ret = ttm_bo_move_ttm(bo, ctx, new_reg);
	ret = ttm_bo_move_to_system(bo, ctx);
	if (ret)
		goto out;

	ttm_bo_assign_mem(bo, &tmp_reg);
out:
	ttm_resource_free(bo, &tmp_reg);
	return ret;
@@ -1048,7 +1052,10 @@ nouveau_bo_move(struct ttm_buffer_object *bo, bool evict,

	if (old_reg->mem_type == TTM_PL_TT &&
	    new_reg->mem_type == TTM_PL_SYSTEM) {
		ret = ttm_bo_move_ttm(bo, ctx, new_reg);
		ret = ttm_bo_move_to_system(bo, ctx);
		if (ret)
			return ret;
		ttm_bo_assign_mem(bo, new_reg);
		goto out;
	}

+12 −3
Original line number Diff line number Diff line
@@ -244,7 +244,11 @@ static int radeon_move_vram_ram(struct ttm_buffer_object *bo,
	if (unlikely(r)) {
		goto out_cleanup;
	}
	r = ttm_bo_move_ttm(bo, ctx, new_mem);
	r = ttm_bo_move_to_system(bo, ctx);
	if (unlikely(r))
		goto out_cleanup;

	ttm_bo_assign_mem(bo, new_mem);
out_cleanup:
	ttm_resource_free(bo, &tmp_mem);
	return r;
@@ -319,9 +323,14 @@ static int radeon_bo_move(struct ttm_buffer_object *bo, bool evict,
	}

	if (old_mem->mem_type == TTM_PL_TT &&
	    new_mem->mem_type == TTM_PL_SYSTEM)
		return ttm_bo_move_ttm(bo, ctx, new_mem);
	    new_mem->mem_type == TTM_PL_SYSTEM) {
		r = ttm_bo_move_to_system(bo, ctx);
		if (r)
			return r;

		ttm_bo_assign_mem(bo, new_mem);
		return 0;
	}
	if (!rdev->ring[radeon_copy_ring_index(rdev)].ready ||
	    rdev->asic->copy.copy == NULL) {
		/* use memcpy */
+3 −2
Original line number Diff line number Diff line
@@ -66,7 +66,7 @@ int ttm_bo_move_to_new_tt_mem(struct ttm_buffer_object *bo,
}
EXPORT_SYMBOL(ttm_bo_move_to_new_tt_mem);

static int ttm_bo_move_to_system(struct ttm_buffer_object *bo,
int ttm_bo_move_to_system(struct ttm_buffer_object *bo,
			  struct ttm_operation_ctx *ctx)
{
	struct ttm_resource *old_mem = &bo->mem;
@@ -87,6 +87,7 @@ static int ttm_bo_move_to_system(struct ttm_buffer_object *bo,
	old_mem->mem_type = TTM_PL_SYSTEM;
	return 0;
}
EXPORT_SYMBOL(ttm_bo_move_to_system);

int ttm_bo_move_ttm(struct ttm_buffer_object *bo,
		   struct ttm_operation_ctx *ctx,
+6 −1
Original line number Diff line number Diff line
@@ -735,13 +735,18 @@ static int vmw_move(struct ttm_buffer_object *bo,
{
	struct ttm_resource_manager *old_man = ttm_manager_type(bo->bdev, bo->mem.mem_type);
	struct ttm_resource_manager *new_man = ttm_manager_type(bo->bdev, new_mem->mem_type);
	int ret;

	if (old_man->use_tt && new_man->use_tt) {
		if (bo->mem.mem_type == TTM_PL_SYSTEM) {
			ttm_bo_assign_mem(bo, new_mem);
			return 0;
		}
		return ttm_bo_move_ttm(bo, ctx, new_mem);
		ret = ttm_bo_move_to_system(bo, ctx);
		if (ret)
			return ret;
		ttm_bo_assign_mem(bo, new_mem);
		return 0;
	} else {
		return ttm_bo_move_memcpy(bo, ctx, new_mem);
	}
Loading