summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Clark <rob@ti.com>2012-07-30 12:38:05 +0800
committerAndy Green <andy.green@linaro.org>2012-07-30 12:38:05 +0800
commitd72d6c63d198383d8b6d3ec5af3a30ab53482d82 (patch)
tree4cbdf6dfa9b528f1dccaf6edc4830842110e2c3c
parent1dab21b43cd7001c6a7b8ff3d3e2cc5719085fc4 (diff)
fix ref leak of external buffers (merge back to plugin API)
drm_gem_mmap() increments the ref count, and expects the corresponding vm_close fxn to decrement it.. otherwise you have a memory leak.
-rw-r--r--drivers/staging/omapdrm/omap_gem.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/staging/omapdrm/omap_gem.c b/drivers/staging/omapdrm/omap_gem.c
index d5c071d2a89..dc308e3c634 100644
--- a/drivers/staging/omapdrm/omap_gem.c
+++ b/drivers/staging/omapdrm/omap_gem.c
@@ -1553,9 +1553,9 @@ void omap_gem_vm_open(struct vm_area_struct *vma)
if (omap_obj->ops && omap_obj->ops->open) {
omap_obj->ops->open(vma);
- } else {
- drm_gem_vm_open(vma);
}
+
+ drm_gem_vm_open(vma);
}
void omap_gem_vm_close(struct vm_area_struct *vma)
@@ -1565,9 +1565,11 @@ void omap_gem_vm_close(struct vm_area_struct *vma)
if (omap_obj->ops && omap_obj->ops->close) {
omap_obj->ops->close(vma);
- } else {
- drm_gem_vm_close(vma);
+ /* don't rely on close function to not have munged things up */
+ vma->vm_private_data = obj;
}
+
+ drm_gem_vm_close(vma);
}
void * omap_gem_priv(struct drm_gem_object *obj, int mapper_id)