diff options
author | Rob Clark <rob@ti.com> | 2012-07-30 12:38:05 +0800 |
---|---|---|
committer | Andy Green <andy.green@linaro.org> | 2012-07-30 12:38:05 +0800 |
commit | d72d6c63d198383d8b6d3ec5af3a30ab53482d82 (patch) | |
tree | 4cbdf6dfa9b528f1dccaf6edc4830842110e2c3c | |
parent | 1dab21b43cd7001c6a7b8ff3d3e2cc5719085fc4 (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 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) |