diff options
Diffstat (limited to 'drivers/gpu/drm/drm_gem.c')
| -rw-r--r-- | drivers/gpu/drm/drm_gem.c | 34 | 
1 files changed, 32 insertions, 2 deletions
diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c index 44a948b80ee1..d4bbc5d109c8 100644 --- a/drivers/gpu/drm/drm_gem.c +++ b/drivers/gpu/drm/drm_gem.c @@ -1161,7 +1161,7 @@ void drm_gem_print_info(struct drm_printer *p, unsigned int indent,  		obj->funcs->print_info(p, indent, obj);  } -int drm_gem_pin(struct drm_gem_object *obj) +int drm_gem_pin_locked(struct drm_gem_object *obj)  {  	if (obj->funcs->pin)  		return obj->funcs->pin(obj); @@ -1169,12 +1169,30 @@ int drm_gem_pin(struct drm_gem_object *obj)  	return 0;  } -void drm_gem_unpin(struct drm_gem_object *obj) +void drm_gem_unpin_locked(struct drm_gem_object *obj)  {  	if (obj->funcs->unpin)  		obj->funcs->unpin(obj);  } +int drm_gem_pin(struct drm_gem_object *obj) +{ +	int ret; + +	dma_resv_lock(obj->resv, NULL); +	ret = drm_gem_pin_locked(obj); +	dma_resv_unlock(obj->resv); + +	return ret; +} + +void drm_gem_unpin(struct drm_gem_object *obj) +{ +	dma_resv_lock(obj->resv, NULL); +	drm_gem_unpin_locked(obj); +	dma_resv_unlock(obj->resv); +} +  int drm_gem_vmap(struct drm_gem_object *obj, struct iosys_map *map)  {  	int ret; @@ -1209,6 +1227,18 @@ void drm_gem_vunmap(struct drm_gem_object *obj, struct iosys_map *map)  }  EXPORT_SYMBOL(drm_gem_vunmap); +void drm_gem_lock(struct drm_gem_object *obj) +{ +	dma_resv_lock(obj->resv, NULL); +} +EXPORT_SYMBOL(drm_gem_lock); + +void drm_gem_unlock(struct drm_gem_object *obj) +{ +	dma_resv_unlock(obj->resv); +} +EXPORT_SYMBOL(drm_gem_unlock); +  int drm_gem_vmap_unlocked(struct drm_gem_object *obj, struct iosys_map *map)  {  	int ret;  |