| From faa1e45f388e05945de8176dbc2b59a91c5a71aa Mon Sep 17 00:00:00 2001 |
| From: YoungJun Cho <yj44.cho@samsung.com> |
| Date: Wed, 26 Jun 2013 10:21:40 +0900 |
| Subject: drm/prime: fix to put an exported dma_buf for adding handle failure |
| |
| When drm_prime_add_buf_handle() returns failure for an exported |
| dma_buf, the dma_buf was already allocated and its refcount was |
| increased, so it needs to be put. |
| |
| Signed-off-by: YoungJun Cho <yj44.cho@samsung.com> |
| Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com> |
| Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> |
| Signed-off-by: Dave Airlie <airlied@redhat.com> |
| (cherry picked from commit 7d8f06ac901300e0b517a263f571531ca27e47b6) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/drm_prime.c | 8 +++++++- |
| 1 file changed, 7 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c |
| index 01d6ccda7050..37b4a49b9afc 100644 |
| --- a/drivers/gpu/drm/drm_prime.c |
| +++ b/drivers/gpu/drm/drm_prime.c |
| @@ -236,7 +236,7 @@ int drm_gem_prime_handle_to_fd(struct drm_device *dev, |
| ret = drm_prime_add_buf_handle(&file_priv->prime, |
| obj->export_dma_buf, handle); |
| if (ret) |
| - goto out; |
| + goto fail_put_dmabuf; |
| |
| *prime_fd = dma_buf_fd(buf, flags); |
| mutex_unlock(&file_priv->prime.lock); |
| @@ -245,6 +245,12 @@ int drm_gem_prime_handle_to_fd(struct drm_device *dev, |
| out_have_obj: |
| get_dma_buf(dmabuf); |
| *prime_fd = dma_buf_fd(dmabuf, flags); |
| + goto out; |
| + |
| +fail_put_dmabuf: |
| + /* clear NOT to be checked when releasing dma_buf */ |
| + obj->export_dma_buf = NULL; |
| + dma_buf_put(buf); |
| out: |
| drm_gem_object_unreference_unlocked(obj); |
| mutex_unlock(&file_priv->prime.lock); |
| -- |
| 1.8.5.rc3 |
| |