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 | |
| 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')
| -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, |
