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);