drm/i915: Flag any possible writes for a GTT fault
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 3 Sep 2018 08:33:34 +0000 (09:33 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Mon, 3 Sep 2018 11:02:02 +0000 (12:02 +0100)
We do not explicitly mark the PTE for the user's GTT mmap as being
wrprotect, so we don't get a refault when we would need to change a
read-only mmapping into read-write. As such, we must presume that if the
vma has PROT_WRITE it may be written to, although this is supposed to be
indicated by set-domain there are cases (e.g. after swap) where
userspace may not be aware of the implicit domain change.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180903083337.13134-2-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_gem.c

index 7b7bbfe596974e08190a2db98a329a1de946f5df..625e07c56fe2bb7aa84e6aff7dd3e2391b9852b4 100644 (file)
@@ -2018,7 +2018,7 @@ vm_fault_t i915_gem_fault(struct vm_fault *vmf)
        struct drm_device *dev = obj->base.dev;
        struct drm_i915_private *dev_priv = to_i915(dev);
        struct i915_ggtt *ggtt = &dev_priv->ggtt;
-       bool write = !!(vmf->flags & FAULT_FLAG_WRITE);
+       bool write = area->vm_flags & VM_WRITE;
        struct i915_vma *vma;
        pgoff_t page_offset;
        int ret;