diff options
Diffstat (limited to 'drivers/gpu/drm/qxl/qxl_object.c')
| -rw-r--r-- | drivers/gpu/drm/qxl/qxl_object.c | 26 | 
1 files changed, 11 insertions, 15 deletions
diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c index 1e46b0a6e478..5893e27a7ae5 100644 --- a/drivers/gpu/drm/qxl/qxl_object.c +++ b/drivers/gpu/drm/qxl/qxl_object.c @@ -29,9 +29,6 @@  #include "qxl_drv.h"  #include "qxl_object.h" -static int __qxl_bo_pin(struct qxl_bo *bo); -static void __qxl_bo_unpin(struct qxl_bo *bo); -  static void qxl_ttm_bo_destroy(struct ttm_buffer_object *tbo)  {  	struct qxl_bo *bo; @@ -167,13 +164,9 @@ int qxl_bo_vmap_locked(struct qxl_bo *bo, struct iosys_map *map)  		goto out;  	} -	r = __qxl_bo_pin(bo); -	if (r) -		return r; -  	r = ttm_bo_vmap(&bo->tbo, &bo->map);  	if (r) { -		__qxl_bo_unpin(bo); +		qxl_bo_unpin_locked(bo);  		return r;  	}  	bo->map_count = 1; @@ -246,7 +239,6 @@ void qxl_bo_vunmap_locked(struct qxl_bo *bo)  		return;  	bo->kptr = NULL;  	ttm_bo_vunmap(&bo->tbo, &bo->map); -	__qxl_bo_unpin(bo);  }  int qxl_bo_vunmap(struct qxl_bo *bo) @@ -290,12 +282,14 @@ struct qxl_bo *qxl_bo_ref(struct qxl_bo *bo)  	return bo;  } -static int __qxl_bo_pin(struct qxl_bo *bo) +int qxl_bo_pin_locked(struct qxl_bo *bo)  {  	struct ttm_operation_ctx ctx = { false, false };  	struct drm_device *ddev = bo->tbo.base.dev;  	int r; +	dma_resv_assert_held(bo->tbo.base.resv); +  	if (bo->tbo.pin_count) {  		ttm_bo_pin(&bo->tbo);  		return 0; @@ -309,14 +303,16 @@ static int __qxl_bo_pin(struct qxl_bo *bo)  	return r;  } -static void __qxl_bo_unpin(struct qxl_bo *bo) +void qxl_bo_unpin_locked(struct qxl_bo *bo)  { +	dma_resv_assert_held(bo->tbo.base.resv); +  	ttm_bo_unpin(&bo->tbo);  }  /*   * Reserve the BO before pinning the object.  If the BO was reserved - * beforehand, use the internal version directly __qxl_bo_pin. + * beforehand, use the internal version directly qxl_bo_pin_locked.   *   */  int qxl_bo_pin(struct qxl_bo *bo) @@ -327,14 +323,14 @@ int qxl_bo_pin(struct qxl_bo *bo)  	if (r)  		return r; -	r = __qxl_bo_pin(bo); +	r = qxl_bo_pin_locked(bo);  	qxl_bo_unreserve(bo);  	return r;  }  /*   * Reserve the BO before pinning the object.  If the BO was reserved - * beforehand, use the internal version directly __qxl_bo_unpin. + * beforehand, use the internal version directly qxl_bo_unpin_locked.   *   */  int qxl_bo_unpin(struct qxl_bo *bo) @@ -345,7 +341,7 @@ int qxl_bo_unpin(struct qxl_bo *bo)  	if (r)  		return r; -	__qxl_bo_unpin(bo); +	qxl_bo_unpin_locked(bo);  	qxl_bo_unreserve(bo);  	return 0;  }  |