drm/i915: mark a newly-created GEM object dirty when filled with data
authorDave Gordon <david.s.gordon@intel.com>
Thu, 10 Dec 2015 18:51:24 +0000 (18:51 +0000)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 11 Dec 2015 17:20:19 +0000 (18:20 +0100)
When creating a new (pageable) GEM object and filling it with data, we
must mark it as 'dirty', i.e. backing store is out-of-date w.r.t. the
newly-written content. This ensures that if the object is evicted under
memory pressure, its pages in the pagecache will be written to backing
store rather than discarded.

Based on an original version by Alex Dai.

Signed-off-by: Alex Dai <yu.dai@intel.com>
Signed-off-by: Dave Gordon <david.s.gordon@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Link: http://patchwork.freedesktop.org/patch/msgid/1449773486-30822-3-git-send-email-david.s.gordon@intel.com
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_gem.c

index 1592c54794635acce708b70817a540b0873c7667..47f6a8244151ac0f329290edf3a1e027b4e78cc4 100644 (file)
@@ -5225,6 +5225,7 @@ i915_gem_object_create_from_data(struct drm_device *dev,
        i915_gem_object_pin_pages(obj);
        sg = obj->pages;
        bytes = sg_copy_from_buffer(sg->sgl, sg->nents, (void *)data, size);
+       obj->dirty = 1;         /* Backing store is now out of date */
        i915_gem_object_unpin_pages(obj);
 
        if (WARN_ON(bytes != size)) {