[PATCH v2] drm/amd/amdgpu: add check that shadow page tables are GPU-accessible

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 2016å¹´12æ??16æ?¥ 01:59, Nicolai Hähnle wrote:
> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>
> Skip amdgpu_gem_va_update_vm otherwise. Also clean up the check for the
> non-shadow page tables using the new helper function.
>
> This fixes a crash with the stack trace:
>
> amdgpu_gem_va_update_vm
> -> amdgpu_vm_update_page_directory
>   -> amdgpu_ttm_bind
>    -> amdgpu_gtt_mgr_alloc
>
> v2: actually check bo->shadow instead of just checking bo twice
>
> Signed-off-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
Reviewed-by: Chunming Zhou <david1.zhou at amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 9 ++++++---
>   1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> index 4e1eb05..9bd1b4e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> @@ -464,26 +464,29 @@ int amdgpu_gem_metadata_ioctl(struct drm_device *dev, void *data,
>   
>   unreserve:
>   	amdgpu_bo_unreserve(robj);
>   out:
>   	drm_gem_object_unreference_unlocked(gobj);
>   	return r;
>   }
>   
>   static int amdgpu_gem_va_check(void *param, struct amdgpu_bo *bo)
>   {
> -	unsigned domain = amdgpu_mem_type_to_domain(bo->tbo.mem.mem_type);
> -
>   	/* if anything is swapped out don't swap it in here,
>   	   just abort and wait for the next CS */
> +	if (!amdgpu_bo_gpu_accessible(bo))
> +		return -ERESTARTSYS;
> +
> +	if (bo->shadow && !amdgpu_bo_gpu_accessible(bo->shadow))
> +		return -ERESTARTSYS;
>   
> -	return domain == AMDGPU_GEM_DOMAIN_CPU ? -ERESTARTSYS : 0;
> +	return 0;
>   }
>   
>   /**
>    * amdgpu_gem_va_update_vm -update the bo_va in its VM
>    *
>    * @adev: amdgpu_device pointer
>    * @bo_va: bo_va to update
>    *
>    * Update the bo_va directly after setting it's address. Errors are not
>    * vital here, so they are not reported back to userspace.



[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux