+struct exynos_drm_gem_obj *exynos_drm_gem_create(struct drm_device *dev,
+ struct drm_file *file_priv,
+ unsigned int *handle, unsigned long size)
+{
+
+ struct exynos_drm_gem_obj *exynos_gem_obj = NULL;
+ struct exynos_drm_buf_entry *entry;
+ int ret;
+
+ size = roundup(size, PAGE_SIZE);
+
+ DRM_DEBUG_KMS("%s: size = 0x%lx\n", __FILE__, size);
+
+ entry = exynos_drm_buf_create(dev, size);
+ if (!entry)
+ return ERR_PTR(-ENOMEM);
+
+ exynos_gem_obj = exynos_drm_gem_init(dev, file_priv, handle, size);
+ if (IS_ERR(exynos_gem_obj)) {
+ ret = PTR_ERR(exynos_gem_obj);
+ goto err_gem_init;
+ }
+
+ exynos_gem_obj->entry = entry;
+
+ return exynos_gem_obj;
+
+err_gem_init:
+ exynos_drm_buf_destroy(dev, exynos_gem_obj->entry);
+
+ return ERR_PTR(ret);
+}
+