drm/i915: Release the mmap offset when purging a buffer
authorChris Wilson <chris@chris-wilson.co.uk>
Fri, 24 Feb 2012 21:13:38 +0000 (21:13 +0000)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 23 Mar 2012 10:04:35 +0000 (11:04 +0100)
If we discard a buffer due to memory pressure, also release its alloted
mmap address space. As it may be sometime before userspace wakes up
and notices that it has buffers to purge from its cache, we may waste
valuable address space on unusable objects for a period of time.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=47738
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_gem.c

index 6b1859799e6cb9e61cfabd13e99643a39f721622..0a16366efaacba43045204d17ce1928a012d5774 100644 (file)
@@ -1546,6 +1546,9 @@ i915_gem_object_truncate(struct drm_i915_gem_object *obj)
        inode = obj->base.filp->f_path.dentry->d_inode;
        shmem_truncate_range(inode, 0, (loff_t)-1);
 
+       if (obj->base.map_list.map)
+               drm_gem_free_mmap_offset(&obj->base);
+
        obj->madv = __I915_MADV_PURGED;
 }