]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/gpu/drm/i915/gem/i915_gem_userptr.c
Merge tag 'usercopy-v5.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux
[linux.git] / drivers / gpu / drm / i915 / gem / i915_gem_userptr.c
index 528b6167833456d9fc6c5a0f8a53197c980a80d1..11b231c187c500f104e85bc736a0a1f4b36f2f4a 100644 (file)
 
 #include <drm/i915_drm.h>
 
+#include "i915_drv.h"
 #include "i915_gem_ioctls.h"
 #include "i915_gem_object.h"
 #include "i915_scatterlist.h"
-#include "i915_trace.h"
-#include "intel_drv.h"
 
 struct i915_mm_struct {
        struct mm_struct *mm;
@@ -150,7 +149,8 @@ userptr_mn_invalidate_range_start(struct mmu_notifier *_mn,
                        }
                }
 
-               ret = i915_gem_object_unbind(obj);
+               ret = i915_gem_object_unbind(obj,
+                                            I915_GEM_OBJECT_UNBIND_ACTIVE);
                if (ret == 0)
                        ret = __i915_gem_object_put_pages(obj, I915_MM_SHRINKER);
                i915_gem_object_put(obj);
@@ -662,6 +662,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)
                        set_page_dirty(page);