diff options
Diffstat (limited to 'drivers/gpu/drm/drm_gem_vram_helper.c')
| -rw-r--r-- | drivers/gpu/drm/drm_gem_vram_helper.c | 90 | 
1 files changed, 32 insertions, 58 deletions
| diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c index 5a16b3e0a413..45650b9b3de9 100644 --- a/drivers/gpu/drm/drm_gem_vram_helper.c +++ b/drivers/gpu/drm/drm_gem_vram_helper.c @@ -368,11 +368,28 @@ int drm_gem_vram_unpin(struct drm_gem_vram_object *gbo)  }  EXPORT_SYMBOL(drm_gem_vram_unpin); -static int drm_gem_vram_kmap_locked(struct drm_gem_vram_object *gbo, -				    struct iosys_map *map) +/** + * drm_gem_vram_vmap() - Pins and maps a GEM VRAM object into kernel address + *                       space + * @gbo: The GEM VRAM object to map + * @map: Returns the kernel virtual address of the VRAM GEM object's backing + *       store. + * + * The vmap function pins a GEM VRAM object to its current location, either + * system or video memory, and maps its buffer into kernel address space. + * As pinned object cannot be relocated, you should avoid pinning objects + * permanently. Call drm_gem_vram_vunmap() with the returned address to + * unmap and unpin the GEM VRAM object. + * + * Returns: + * 0 on success, or a negative error code otherwise. + */ +int drm_gem_vram_vmap(struct drm_gem_vram_object *gbo, struct iosys_map *map)  {  	int ret; +	dma_resv_assert_held(gbo->bo.base.resv); +  	if (gbo->vmap_use_count > 0)  		goto out; @@ -393,12 +410,23 @@ out:  	return 0;  } +EXPORT_SYMBOL(drm_gem_vram_vmap); -static void drm_gem_vram_kunmap_locked(struct drm_gem_vram_object *gbo, -				       struct iosys_map *map) +/** + * drm_gem_vram_vunmap() - Unmaps and unpins a GEM VRAM object + * @gbo: The GEM VRAM object to unmap + * @map: Kernel virtual address where the VRAM GEM object was mapped + * + * A call to drm_gem_vram_vunmap() unmaps and unpins a GEM VRAM buffer. See + * the documentation for drm_gem_vram_vmap() for more information. + */ +void drm_gem_vram_vunmap(struct drm_gem_vram_object *gbo, +			 struct iosys_map *map)  {  	struct drm_device *dev = gbo->bo.base.dev; +	dma_resv_assert_held(gbo->bo.base.resv); +  	if (drm_WARN_ON_ONCE(dev, !gbo->vmap_use_count))  		return; @@ -415,60 +443,6 @@ static void drm_gem_vram_kunmap_locked(struct drm_gem_vram_object *gbo,  	 * from memory. See drm_gem_vram_bo_driver_move_notify().  	 */  } - -/** - * drm_gem_vram_vmap() - Pins and maps a GEM VRAM object into kernel address - *                       space - * @gbo: The GEM VRAM object to map - * @map: Returns the kernel virtual address of the VRAM GEM object's backing - *       store. - * - * The vmap function pins a GEM VRAM object to its current location, either - * system or video memory, and maps its buffer into kernel address space. - * As pinned object cannot be relocated, you should avoid pinning objects - * permanently. Call drm_gem_vram_vunmap() with the returned address to - * unmap and unpin the GEM VRAM object. - * - * Returns: - * 0 on success, or a negative error code otherwise. - */ -int drm_gem_vram_vmap(struct drm_gem_vram_object *gbo, struct iosys_map *map) -{ -	int ret; - -	dma_resv_assert_held(gbo->bo.base.resv); - -	ret = drm_gem_vram_pin_locked(gbo, 0); -	if (ret) -		return ret; -	ret = drm_gem_vram_kmap_locked(gbo, map); -	if (ret) -		goto err_drm_gem_vram_unpin_locked; - -	return 0; - -err_drm_gem_vram_unpin_locked: -	drm_gem_vram_unpin_locked(gbo); -	return ret; -} -EXPORT_SYMBOL(drm_gem_vram_vmap); - -/** - * drm_gem_vram_vunmap() - Unmaps and unpins a GEM VRAM object - * @gbo: The GEM VRAM object to unmap - * @map: Kernel virtual address where the VRAM GEM object was mapped - * - * A call to drm_gem_vram_vunmap() unmaps and unpins a GEM VRAM buffer. See - * the documentation for drm_gem_vram_vmap() for more information. - */ -void drm_gem_vram_vunmap(struct drm_gem_vram_object *gbo, -			 struct iosys_map *map) -{ -	dma_resv_assert_held(gbo->bo.base.resv); - -	drm_gem_vram_kunmap_locked(gbo, map); -	drm_gem_vram_unpin_locked(gbo); -}  EXPORT_SYMBOL(drm_gem_vram_vunmap);  /** | 
