drm/fb_cma_helper: Increase ref count when exporting dma-buf The fbdev helper that exports a dma-buf to user space didn't correctly increase the reference count of the DRM driver. Increase the reference count if exporting was successful. Change-Id: Id0239e10b7cd46b146dd596f78ee4690910ea747 Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Liviu Dudau <liviu.dudau@arm.com>
diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c b/drivers/gpu/drm/drm_fb_cma_helper.c index dd2d817..bcd2a42 100644 --- a/drivers/gpu/drm/drm_fb_cma_helper.c +++ b/drivers/gpu/drm/drm_fb_cma_helper.c
@@ -223,16 +223,23 @@ struct dma_buf *drm_fb_cma_get_dmabuf(struct fb_info *info) { + struct dma_buf *buf = NULL; struct drm_fb_helper *helper = info->par; struct drm_device *dev = helper->dev; struct drm_gem_cma_object *cma_obj; - if (dev->driver->gem_prime_export) { - cma_obj = drm_fb_cma_get_gem_obj(helper->fb, 0); - return dev->driver->gem_prime_export(dev, &cma_obj->base, - O_RDWR); - } else + if (!dev->driver->gem_prime_export) return NULL; + + cma_obj = drm_fb_cma_get_gem_obj(helper->fb, 0); + buf = dev->driver->gem_prime_export(dev, &cma_obj->base, + O_RDWR); + if (IS_ERR_OR_NULL(buf)) + return buf; + + drm_gem_object_reference(&cma_obj->base); + + return buf; } EXPORT_SYMBOL_GPL(drm_fb_cma_get_dmabuf);