]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm/i915/userptr: Don't mark readonly objects as dirty
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 9 Jul 2019 08:17:18 +0000 (09:17 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 9 Jul 2019 17:54:19 +0000 (18:54 +0100)
If we map an object as readonly into the GTT, we know that the GPU
cannot have written to it and so the object is not dirty and we don't
need to flush the writes back to the system.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190709081718.27843-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/gem/i915_gem_userptr.c

index 32d208ede343acac5b19ae5d90256ea9386e0f80..b9d2bb15e4a69b6b5c6cdc85399119451c75a7b2 100644 (file)
@@ -663,6 +663,14 @@ i915_gem_userptr_put_pages(struct drm_i915_gem_object *obj,
        __i915_gem_object_release_shmem(obj, pages, true);
        i915_gem_gtt_finish_pages(obj, pages);
 
+       /*
+        * We always mark objects as dirty when they are used by the GPU,
+        * just in case. However, if we set the vma as being read-only we know
+        * that the object will never have been written to.
+        */
+       if (i915_gem_object_is_readonly(obj))
+               obj->mm.dirty = false;
+
        for_each_sgt_page(page, sgt_iter, pages) {
                if (obj->mm.dirty)
                        /*