diff options
Diffstat (limited to 'drivers/gpu/drm/drm_prime.c')
| -rw-r--r-- | drivers/gpu/drm/drm_prime.c | 8 | 
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c index 7830d8e1f21..71c7315ca00 100644 --- a/drivers/gpu/drm/drm_prime.c +++ b/drivers/gpu/drm/drm_prime.c @@ -271,7 +271,6 @@ struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev,  			 * refcount on gem itself instead of f_count of dmabuf.  			 */  			drm_gem_object_reference(obj); -			dma_buf_put(dma_buf);  			return obj;  		}  	} @@ -280,6 +279,8 @@ struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev,  	if (IS_ERR(attach))  		return ERR_PTR(PTR_ERR(attach)); +	get_dma_buf(dma_buf); +  	sgt = dma_buf_map_attachment(attach, DMA_BIDIRECTIONAL);  	if (IS_ERR_OR_NULL(sgt)) {  		ret = PTR_ERR(sgt); @@ -300,6 +301,8 @@ fail_unmap:  	dma_buf_unmap_attachment(attach, sgt, DMA_BIDIRECTIONAL);  fail_detach:  	dma_buf_detach(dma_buf, attach); +	dma_buf_put(dma_buf); +  	return ERR_PTR(ret);  }  EXPORT_SYMBOL(drm_gem_prime_import); @@ -342,6 +345,9 @@ int drm_gem_prime_fd_to_handle(struct drm_device *dev,  		goto fail;  	mutex_unlock(&file_priv->prime.lock); + +	dma_buf_put(dma_buf); +  	return 0;  fail:  |