[PATCH 03/10] drm/amdkfd: set owner ref to svm range prefault
Felix Kuehling
felix.kuehling at amd.com
Mon Jun 21 20:02:52 UTC 2021
On 2021-06-21 12:04 p.m., Alex Sierra wrote:
> 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 at amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling at amd.com>
> ---
> drivers/gpu/drm/amd/amdkfd/kfd_migrate.c | 2 +-
> drivers/gpu/drm/amd/amdkfd/kfd_svm.c | 5 +++--
> drivers/gpu/drm/amd/amdkfd/kfd_svm.h | 3 ++-
> 3 files changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c b/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
> index 11f7f590c6ec..b298aa8dea4d 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
> @@ -512,7 +512,7 @@ svm_migrate_ram_to_vram(struct svm_range *prange, uint32_t best_loc,
> prange->start, prange->last, best_loc);
>
> /* FIXME: workaround for page locking bug with invalid pages */
> - svm_range_prefault(prange, mm);
> + svm_range_prefault(prange, mm, SVM_ADEV_PGMAP_OWNER(adev));
>
> start = prange->start << PAGE_SHIFT;
> end = (prange->last + 1) << PAGE_SHIFT;
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
> index b939f353ac8c..54f47b09b14a 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
> @@ -2646,7 +2646,8 @@ svm_range_best_prefetch_location(struct svm_range *prange)
> /* FIXME: This is a workaround for page locking bug when some pages are
> * invalid during migration to VRAM
> */
> -void svm_range_prefault(struct svm_range *prange, struct mm_struct *mm)
> +void svm_range_prefault(struct svm_range *prange, struct mm_struct *mm,
> + void *owner)
> {
> struct hmm_range *hmm_range;
> int r;
> @@ -2657,7 +2658,7 @@ void svm_range_prefault(struct svm_range *prange, struct mm_struct *mm)
> r = amdgpu_hmm_range_get_pages(&prange->notifier, mm, NULL,
> prange->start << PAGE_SHIFT,
> prange->npages, &hmm_range,
> - false, true, NULL);
> + false, true, owner);
> if (!r) {
> amdgpu_hmm_range_get_pages_done(hmm_range);
> prange->validated_once = true;
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.h b/drivers/gpu/drm/amd/amdkfd/kfd_svm.h
> index 4297250f259d..08542fe39303 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.h
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.h
> @@ -176,7 +176,8 @@ void schedule_deferred_list_work(struct svm_range_list *svms);
> void svm_range_dma_unmap(struct device *dev, dma_addr_t *dma_addr,
> unsigned long offset, unsigned long npages);
> void svm_range_free_dma_mappings(struct svm_range *prange);
> -void svm_range_prefault(struct svm_range *prange, struct mm_struct *mm);
> +void svm_range_prefault(struct svm_range *prange, struct mm_struct *mm,
> + void *owner);
>
> #else
>
More information about the amd-gfx
mailing list