Commit 8eeddc0d authored by Xiaogang Chen's avatar Xiaogang Chen Committed by Alex Deucher
Browse files

drm/amdkfd: Get prange->offset after svm_range_vram_node_new



During miration to vram prange->offset is valid after vram buffer is located,
either use old one or allocate a new one. Move svm_range_vram_node_new before
migrate for each vma to get valid prange->offset.

v2: squash in warning fix

Fixes: b4ee9606 ("drm/amdkfd: Fix BO offset for multi-VMA page migration")
Signed-off-by: default avatarXiaogang Chen <Xiaogang.Chen@amd.com>
Reviewed-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent b4ee9606
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -305,12 +305,6 @@ svm_migrate_copy_to_vram(struct amdgpu_device *adev, struct svm_range *prange,
	src = scratch;
	dst = (uint64_t *)(scratch + npages);

	r = svm_range_vram_node_new(adev, prange, true);
	if (r) {
		dev_dbg(adev->dev, "fail %d to alloc vram\n", r);
		goto out;
	}

	amdgpu_res_first(prange->ttm_res, ttm_res_offset,
			 npages << PAGE_SHIFT, &cursor);
	for (i = j = 0; i < npages; i++) {
@@ -391,7 +385,7 @@ svm_migrate_copy_to_vram(struct amdgpu_device *adev, struct svm_range *prange,
		migrate->dst[i + 3] = 0;
	}
#endif
out:

	return r;
}

@@ -520,6 +514,12 @@ svm_migrate_ram_to_vram(struct svm_range *prange, uint32_t best_loc,

	start = prange->start << PAGE_SHIFT;
	end = (prange->last + 1) << PAGE_SHIFT;

	r = svm_range_vram_node_new(adev, prange, true);
	if (r) {
		dev_dbg(adev->dev, "fail %ld to alloc vram\n", r);
		return r;
	}
	ttm_res_offset = prange->offset << PAGE_SHIFT;

	for (addr = start; addr < end;) {
@@ -543,6 +543,8 @@ svm_migrate_ram_to_vram(struct svm_range *prange, uint32_t best_loc,

	if (cpages)
		prange->actual_loc = best_loc;
	else
		svm_range_vram_node_free(prange);

	return r < 0 ? r : 0;
}