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