aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/exynos
diff options
context:
space:
mode:
authorSeung-Woo Kim <sw0312.kim@samsung.com>2011-11-15 02:25:39 -0500
committerInki Dae <inki.dae@samsung.com>2011-11-16 20:05:39 -0500
commitca22e3cc25f180859561f36d51bf21278db5ae11 (patch)
treec7f480c59af0586198cb4ef58c4b45386fed0bf5 /drivers/gpu/drm/exynos
parent396464dfbba8f734c57346489b871e7ed64dcdd1 (diff)
drm/exynos: fixed wrong err ptr usage and destroy call in exeception
- exynos_drm_buf_create() returns err pointer so NULL check is wrong. - Case that exynos_gem_obj is not created, destroy call in exception handle lable uses this pointer. so instead buffer is directly used. Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com> Signed-off-by: Inki Dae <inki.dae@samsung.com>
Diffstat (limited to 'drivers/gpu/drm/exynos')
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_gem.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.c b/drivers/gpu/drm/exynos/exynos_drm_gem.c
index b1b94b1e4400..aba0fe47f7ea 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_gem.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_gem.c
@@ -128,30 +128,25 @@ struct exynos_drm_gem_obj *exynos_drm_gem_create(struct drm_device *dev,
128 128
129 struct exynos_drm_gem_obj *exynos_gem_obj = NULL; 129 struct exynos_drm_gem_obj *exynos_gem_obj = NULL;
130 struct exynos_drm_gem_buf *buffer; 130 struct exynos_drm_gem_buf *buffer;
131 int ret;
132 131
133 size = roundup(size, PAGE_SIZE); 132 size = roundup(size, PAGE_SIZE);
134 133
135 DRM_DEBUG_KMS("%s: size = 0x%lx\n", __FILE__, size); 134 DRM_DEBUG_KMS("%s: size = 0x%lx\n", __FILE__, size);
136 135
137 buffer = exynos_drm_buf_create(dev, size); 136 buffer = exynos_drm_buf_create(dev, size);
138 if (!buffer) 137 if (IS_ERR(buffer)) {
139 return ERR_PTR(-ENOMEM); 138 return ERR_CAST(buffer);
139 }
140 140
141 exynos_gem_obj = exynos_drm_gem_init(dev, file_priv, handle, size); 141 exynos_gem_obj = exynos_drm_gem_init(dev, file_priv, handle, size);
142 if (IS_ERR(exynos_gem_obj)) { 142 if (IS_ERR(exynos_gem_obj)) {
143 ret = PTR_ERR(exynos_gem_obj); 143 exynos_drm_buf_destroy(dev, buffer);
144 goto err_gem_init; 144 return exynos_gem_obj;
145 } 145 }
146 146
147 exynos_gem_obj->buffer = buffer; 147 exynos_gem_obj->buffer = buffer;
148 148
149 return exynos_gem_obj; 149 return exynos_gem_obj;
150
151err_gem_init:
152 exynos_drm_buf_destroy(dev, exynos_gem_obj->buffer);
153
154 return ERR_PTR(ret);
155} 150}
156 151
157int exynos_drm_gem_create_ioctl(struct drm_device *dev, void *data, 152int exynos_drm_gem_create_ioctl(struct drm_device *dev, void *data,