drm/amdkfd: pages_addr offset must be 0 for system range
authorPhilip Yang <Philip.Yang@amd.com>
Fri, 4 Jun 2021 20:22:58 +0000 (16:22 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 7 Jun 2021 18:57:18 +0000 (14:57 -0400)
prange->offset is for VRAM range mm_nodes, if multiple ranges share same
mm_nodes, migrate range back to VRAM will reuse the VRAM at offset of
the same mm_nodes. For system memory pages_addr array, the offset is
always 0, otherwise, update GPU mapping will use incorrect system memory
page, and cause system memory corruption.

Signed-off-by: Philip Yang <Philip.Yang@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdkfd/kfd_svm.c

index f2901e7a993ecf75d3417758407206829328da0d..0f18bd0dc64eeb713919a98e68cea0c8c2682a9c 100644 (file)
@@ -1153,7 +1153,7 @@ svm_range_map_to_gpu(struct amdgpu_device *adev, struct amdgpu_vm *vm,
 
        prange->mapping.start = prange->start;
        prange->mapping.last = prange->last;
-       prange->mapping.offset = prange->offset;
+       prange->mapping.offset = prange->ttm_res ? prange->offset : 0;
        pte_flags = svm_range_get_pte_flags(adev, prange);
 
        r = amdgpu_vm_bo_update_mapping(adev, bo_adev, vm, false, false, NULL,