Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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: 9473b6b25b83 ("drm/amdkfd: Fix BO offset for multi-VMA page migration")
Signed-off-by: Xiaogang Chen <Xiaogang.Chen@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Xiaogang Chen and committed by
Alex Deucher
0fb44d54 67f3c209

+9 -7
+9 -7
drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
··· 305 305 src = scratch; 306 306 dst = (uint64_t *)(scratch + npages); 307 307 308 - r = svm_range_vram_node_new(adev, prange, true); 309 - if (r) { 310 - dev_dbg(adev->dev, "fail %d to alloc vram\n", r); 311 - goto out; 312 - } 313 - 314 308 amdgpu_res_first(prange->ttm_res, ttm_res_offset, 315 309 npages << PAGE_SHIFT, &cursor); 316 310 for (i = j = 0; i < npages; i++) { ··· 385 391 migrate->dst[i + 3] = 0; 386 392 } 387 393 #endif 388 - out: 394 + 389 395 return r; 390 396 } 391 397 ··· 514 520 515 521 start = prange->start << PAGE_SHIFT; 516 522 end = (prange->last + 1) << PAGE_SHIFT; 523 + 524 + r = svm_range_vram_node_new(adev, prange, true); 525 + if (r) { 526 + dev_dbg(adev->dev, "fail %ld to alloc vram\n", r); 527 + return r; 528 + } 517 529 ttm_res_offset = prange->offset << PAGE_SHIFT; 518 530 519 531 for (addr = start; addr < end;) { ··· 543 543 544 544 if (cpages) 545 545 prange->actual_loc = best_loc; 546 + else 547 + svm_range_vram_node_free(prange); 546 548 547 549 return r < 0 ? r : 0; 548 550 }