diff options
author | Seung-Woo Kim <sw0312.kim@samsung.com> | 2011-11-15 02:25:39 -0500 |
---|---|---|
committer | Inki Dae <inki.dae@samsung.com> | 2011-11-16 20:05:39 -0500 |
commit | ca22e3cc25f180859561f36d51bf21278db5ae11 (patch) | |
tree | c7f480c59af0586198cb4ef58c4b45386fed0bf5 /drivers/gpu/drm/exynos | |
parent | 396464dfbba8f734c57346489b871e7ed64dcdd1 (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.c | 15 |
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 | |||
151 | err_gem_init: | ||
152 | exynos_drm_buf_destroy(dev, exynos_gem_obj->buffer); | ||
153 | |||
154 | return ERR_PTR(ret); | ||
155 | } | 150 | } |
156 | 151 | ||
157 | int exynos_drm_gem_create_ioctl(struct drm_device *dev, void *data, | 152 | int exynos_drm_gem_create_ioctl(struct drm_device *dev, void *data, |