diff options
author | Rob Clark <rob@ti.com> | 2012-02-28 17:29:08 -0600 |
---|---|---|
committer | Guillaume Aubertin <g-aubertin@ti.com> | 2012-06-27 22:57:08 +0000 |
commit | 3bcf2996c95968759d3671015106a01682012ffa (patch) | |
tree | 529766227d4eb507a1bfa84ea6685578889c310b | |
parent | b53ab3256ba3c3894c4b656f0bc68b60ce06d244 (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.c | 10 |
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) |