Skip to content

Commit 1e214f7

Browse files
mukjoshialexdeucher
authored andcommitted
drm/amdkfd: Add VRAM accounting for SVM migration
Do VRAM accounting when doing migrations to vram to make sure there is enough available VRAM and migrating to VRAM doesn't evict other possible non-unified memory BOs. If migrating to VRAM fails, driver can fall back to using system memory seamlessly. Signed-off-by: Mukul Joshi <[email protected]> Reviewed-by: Felix Kuehling <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent 30d1cda commit 1e214f7

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

drivers/gpu/drm/amd/amdkfd/kfd_migrate.c

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -509,10 +509,19 @@ svm_migrate_ram_to_vram(struct svm_range *prange, uint32_t best_loc,
509509
start = start_mgr << PAGE_SHIFT;
510510
end = (last_mgr + 1) << PAGE_SHIFT;
511511

512+
r = amdgpu_amdkfd_reserve_mem_limit(node->adev,
513+
prange->npages * PAGE_SIZE,
514+
KFD_IOC_ALLOC_MEM_FLAGS_VRAM,
515+
node->xcp ? node->xcp->id : 0);
516+
if (r) {
517+
dev_dbg(node->adev->dev, "failed to reserve VRAM, r: %ld\n", r);
518+
return -ENOSPC;
519+
}
520+
512521
r = svm_range_vram_node_new(node, prange, true);
513522
if (r) {
514523
dev_dbg(node->adev->dev, "fail %ld to alloc vram\n", r);
515-
return r;
524+
goto out;
516525
}
517526
ttm_res_offset = (start_mgr - prange->start + prange->offset) << PAGE_SHIFT;
518527

@@ -545,6 +554,11 @@ svm_migrate_ram_to_vram(struct svm_range *prange, uint32_t best_loc,
545554
svm_range_vram_node_free(prange);
546555
}
547556

557+
out:
558+
amdgpu_amdkfd_unreserve_mem_limit(node->adev,
559+
prange->npages * PAGE_SIZE,
560+
KFD_IOC_ALLOC_MEM_FLAGS_VRAM,
561+
node->xcp ? node->xcp->id : 0);
548562
return r < 0 ? r : 0;
549563
}
550564

drivers/gpu/drm/amd/amdkfd/kfd_svm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3426,7 +3426,7 @@ svm_range_trigger_migration(struct mm_struct *mm, struct svm_range *prange,
34263426
mm, KFD_MIGRATE_TRIGGER_PREFETCH);
34273427
*migrated = !r;
34283428

3429-
return r;
3429+
return 0;
34303430
}
34313431

34323432
int svm_range_schedule_evict_svm_bo(struct amdgpu_amdkfd_fence *fence)

0 commit comments

Comments
 (0)