[PATCH] drm/amdgpu: fix VM faults with per VM BOs

Chunming Zhou zhoucm1 at amd.com
Mon Dec 25 05:41:41 UTC 2017



On 2017年12月23日 00:17, Christian König wrote:
> There was a small window where the freshly allocated BO could have been
> evicted without the VM noticing it.
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
small window between unreserve and second reserve.

Reviewed-by: Chunming Zhou <david1.zhou at amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 22 ++++++++++++++++++++--
>   1 file changed, 20 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index af7dceb7131e..e623109be202 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -1745,8 +1745,26 @@ struct amdgpu_bo_va *amdgpu_vm_bo_add(struct amdgpu_device *adev,
>   	INIT_LIST_HEAD(&bo_va->valids);
>   	INIT_LIST_HEAD(&bo_va->invalids);
>   
> -	if (bo)
> -		list_add_tail(&bo_va->base.bo_list, &bo->va);
> +	if (!bo)
> +		return bo_va;
> +
> +	list_add_tail(&bo_va->base.bo_list, &bo->va);
> +
> +	if (bo->tbo.resv != vm->root.base.bo->tbo.resv)
> +		return bo_va;
> +
> +	if (bo->preferred_domains &
> +	    amdgpu_mem_type_to_domain(bo->tbo.mem.mem_type))
> +		return bo_va;
> +
> +	/*
> +	 * We checked all the prerequisites, but it looks like this per VM BO
> +	 * is currently evicted. add the BO to the evicted list to make sure it
> +	 * is validated on next VM use to avoid fault.
> +	 * */
> +	spin_lock(&vm->status_lock);
> +	list_move_tail(&bo_va->base.vm_status, &vm->evicted);
> +	spin_unlock(&vm->status_lock);
>   
>   	return bo_va;
>   }



More information about the amd-gfx mailing list