Skip to content

Commit a010d98

Browse files
alexsierragalexdeucher
authored andcommitted
drm/amdkfd: set owner ref to svm range prefault
svm_range_prefault is called right before migrations to VRAM, to make sure pages are resident in system memory before the migration. With partial migrations, this reference is used by hmm range get pages to avoid migrating pages that are already in the same VRAM domain. Signed-off-by: Alex Sierra <alex.sierra@amd.com> Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
1 parent 8c21fc4 commit a010d98

3 files changed

Lines changed: 6 additions & 4 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ svm_migrate_ram_to_vram(struct svm_range *prange, uint32_t best_loc,
471471
prange->start, prange->last, best_loc);
472472

473473
/* FIXME: workaround for page locking bug with invalid pages */
474-
svm_range_prefault(prange, mm);
474+
svm_range_prefault(prange, mm, SVM_ADEV_PGMAP_OWNER(adev));
475475

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

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2717,7 +2717,8 @@ svm_range_best_prefetch_location(struct svm_range *prange)
27172717
/* FIXME: This is a workaround for page locking bug when some pages are
27182718
* invalid during migration to VRAM
27192719
*/
2720-
void svm_range_prefault(struct svm_range *prange, struct mm_struct *mm)
2720+
void svm_range_prefault(struct svm_range *prange, struct mm_struct *mm,
2721+
void *owner)
27212722
{
27222723
struct hmm_range *hmm_range;
27232724
int r;
@@ -2728,7 +2729,7 @@ void svm_range_prefault(struct svm_range *prange, struct mm_struct *mm)
27282729
r = amdgpu_hmm_range_get_pages(&prange->notifier, mm, NULL,
27292730
prange->start << PAGE_SHIFT,
27302731
prange->npages, &hmm_range,
2731-
false, true, NULL);
2732+
false, true, owner);
27322733
if (!r) {
27332734
amdgpu_hmm_range_get_pages_done(hmm_range);
27342735
prange->validated_once = true;

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,8 @@ void schedule_deferred_list_work(struct svm_range_list *svms);
176176
void svm_range_dma_unmap(struct device *dev, dma_addr_t *dma_addr,
177177
unsigned long offset, unsigned long npages);
178178
void svm_range_free_dma_mappings(struct svm_range *prange);
179-
void svm_range_prefault(struct svm_range *prange, struct mm_struct *mm);
179+
void svm_range_prefault(struct svm_range *prange, struct mm_struct *mm,
180+
void *owner);
180181
struct kfd_process_device *
181182
svm_range_get_pdd_by_adev(struct svm_range *prange, struct amdgpu_device *adev);
182183

0 commit comments

Comments
 (0)