summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Clark <rob@ti.com>2012-02-28 17:29:08 -0600
committerGuillaume Aubertin <g-aubertin@ti.com>2012-06-27 22:57:08 +0000
commit3bcf2996c95968759d3671015106a01682012ffa (patch)
tree529766227d4eb507a1bfa84ea6685578889c310b
parentb53ab3256ba3c3894c4b656f0bc68b60ce06d244 (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 d5c071d2a89e..dc308e3c6343 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)