[PATCH v2] drm/amdkfd: add pinned BOs to kfd_bo_list
Felix Kuehling
felix.kuehling at amd.com
Wed Jun 1 06:04:19 UTC 2022
Am 2022-05-31 um 21:39 schrieb Lang Yu:
> The kfd_bo_list is used to restore process BOs after
> evictions. As page tables could be destroyed during
> evictions, we should also update pinned BOs' page tables
> during restoring to make sure they are valid.
>
> So for pinned BOs,
> 1, Validating them and update their page tables.
> 2, Don't add eviction fence for them.
>
> v2:
> - Don't handle pinned ones specially in BO validation.(Felix)
>
> Signed-off-by: Lang Yu <Lang.Yu at amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 13 ++++++-------
> 1 file changed, 6 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> index 34ba9e776521..054e4a76ae2e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> @@ -1953,9 +1953,6 @@ int amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel(struct amdgpu_device *adev,
> return -EINVAL;
> }
>
> - /* delete kgd_mem from kfd_bo_list to avoid re-validating
> - * this BO in BO's restoring after eviction.
> - */
> mutex_lock(&mem->process_info->lock);
>
> ret = amdgpu_bo_reserve(bo, true);
> @@ -1978,7 +1975,6 @@ int amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel(struct amdgpu_device *adev,
>
> amdgpu_amdkfd_remove_eviction_fence(
> bo, mem->process_info->eviction_fence);
> - list_del_init(&mem->validate_list.head);
>
> if (size)
> *size = amdgpu_bo_size(bo);
> @@ -2542,12 +2538,15 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence **ef)
> process_info->eviction_fence = new_fence;
> *ef = dma_fence_get(&new_fence->base);
>
> - /* Attach new eviction fence to all BOs */
> + /* Attach new eviction fence to all BOs except pinned ones */
> list_for_each_entry(mem, &process_info->kfd_bo_list,
> - validate_list.head)
> + validate_list.head) {
> + if (mem->bo->tbo.pin_count)
> + continue;
> +
> amdgpu_bo_fence(mem->bo,
> &process_info->eviction_fence->base, true);
> -
> + }
> /* Attach eviction fence to PD / PT BOs */
> list_for_each_entry(peer_vm, &process_info->vm_list_head,
> vm_list_node) {
More information about the amd-gfx
mailing list