[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