diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 10 | 
1 files changed, 9 insertions, 1 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c index ab34190859a8..11af4492b4be 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c @@ -223,6 +223,8 @@ static int amdgpu_verify_access(struct ttm_buffer_object *bo, struct file *filp)  {  	struct amdgpu_bo *rbo = container_of(bo, struct amdgpu_bo, tbo); +	if (amdgpu_ttm_tt_get_usermm(bo->ttm)) +		return -EPERM;  	return drm_vma_node_verify_access(&rbo->gem_base.vma_node, filp);  } @@ -384,9 +386,15 @@ static int amdgpu_bo_move(struct ttm_buffer_object *bo,  			struct ttm_mem_reg *new_mem)  {  	struct amdgpu_device *adev; +	struct amdgpu_bo *abo;  	struct ttm_mem_reg *old_mem = &bo->mem;  	int r; +	/* Can't move a pinned BO */ +	abo = container_of(bo, struct amdgpu_bo, tbo); +	if (WARN_ON_ONCE(abo->pin_count > 0)) +		return -EINVAL; +  	adev = amdgpu_get_adev(bo->bdev);  	if (old_mem->mem_type == TTM_PL_SYSTEM && bo->ttm == NULL) {  		amdgpu_move_null(bo, new_mem); @@ -616,7 +624,7 @@ static void amdgpu_ttm_tt_unpin_userptr(struct ttm_tt *ttm)  			set_page_dirty(page);  		mark_page_accessed(page); -		page_cache_release(page); +		put_page(page);  	}  	sg_free_table(ttm->sg); | 
