Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fad06127 authored by Samuel Pitoiset's avatar Samuel Pitoiset Committed by Alex Deucher
Browse files

drm/amdgpu: report the number of bytes moved at buffer creation



Like ttm_bo_validate(), ttm_bo_init() might need to move BO and
the number of bytes moved by TTM should be reported. This can help
the throttle buffer migration mechanism to make a better decision.

v2: fix computation

Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarSamuel Pitoiset <samuel.pitoiset@gmail.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 38fc4856
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1709,6 +1709,7 @@ int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data);
int amdgpu_cs_get_ring(struct amdgpu_device *adev, u32 ip_type,
		       u32 ip_instance, u32 ring,
		       struct amdgpu_ring **out_ring);
void amdgpu_cs_report_moved_bytes(struct amdgpu_device *adev, u64 num_bytes);
void amdgpu_ttm_placement_from_domain(struct amdgpu_bo *abo, u32 domain);
bool amdgpu_ttm_bo_is_amdgpu_bo(struct ttm_buffer_object *bo);
int amdgpu_ttm_tt_get_user_pages(struct ttm_tt *ttm, struct page **pages);
+1 −2
Original line number Diff line number Diff line
@@ -344,8 +344,7 @@ static u64 amdgpu_cs_get_threshold_for_moves(struct amdgpu_device *adev)
 * submission. This can result in a debt that can stop buffer migrations
 * temporarily.
 */
static void amdgpu_cs_report_moved_bytes(struct amdgpu_device *adev,
					 u64 num_bytes)
void amdgpu_cs_report_moved_bytes(struct amdgpu_device *adev, u64 num_bytes)
{
	spin_lock(&adev->mm_stats.lock);
	adev->mm_stats.accum_us -= bytes_to_us(adev, num_bytes);
+6 −0
Original line number Diff line number Diff line
@@ -323,6 +323,7 @@ int amdgpu_bo_create_restricted(struct amdgpu_device *adev,
	struct amdgpu_bo *bo;
	enum ttm_bo_type type;
	unsigned long page_align;
	u64 initial_bytes_moved;
	size_t acc_size;
	int r;

@@ -401,10 +402,15 @@ int amdgpu_bo_create_restricted(struct amdgpu_device *adev,
		locked = ww_mutex_trylock(&bo->tbo.ttm_resv.lock);
		WARN_ON(!locked);
	}

	initial_bytes_moved = atomic64_read(&adev->num_bytes_moved);
	r = ttm_bo_init(&adev->mman.bdev, &bo->tbo, size, type,
			&bo->placement, page_align, !kernel, NULL,
			acc_size, sg, resv ? resv : &bo->tbo.ttm_resv,
			&amdgpu_ttm_bo_destroy);
	amdgpu_cs_report_moved_bytes(adev,
		atomic64_read(&adev->num_bytes_moved) - initial_bytes_moved);

	if (unlikely(r != 0)) {
		if (!resv)
			ww_mutex_unlock(&bo->tbo.resv->lock);