[PATCH 48/48] pin-pages-flush
Chris Wilson
chris at chris-wilson.co.uk
Sat Mar 16 19:13:31 UTC 2019
---
drivers/gpu/drm/i915/gem/i915_gem_mman.c | 17 -----------------
drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 5 +++++
2 files changed, 5 insertions(+), 17 deletions(-)
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
index 55474722531b..a939ca2309cd 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
@@ -237,17 +237,6 @@ vm_fault_t i915_gem_fault(struct vm_fault *vmf)
trace_i915_gem_object_fault(obj, page_offset, true, write);
- /* Try to flush the object off the GPU first without holding the lock.
- * Upon acquiring the lock, we will perform our sanity checks and then
- * repeat the flush holding the lock in the normal manner to catch cases
- * where we are gazumped.
- */
- ret = i915_gem_object_wait(obj,
- I915_WAIT_INTERRUPTIBLE,
- MAX_SCHEDULE_TIMEOUT);
- if (ret)
- goto err;
-
ret = i915_gem_object_pin_pages(obj);
if (ret)
goto err;
@@ -303,12 +292,6 @@ vm_fault_t i915_gem_fault(struct vm_fault *vmf)
goto err_unlock;
}
- i915_gem_object_lock(obj);
- ret = i915_gem_object_set_to_gtt_domain(obj, write);
- i915_gem_object_unlock(obj);
- if (ret)
- goto err_unpin;
-
ret = i915_vma_pin_fence(vma);
if (ret)
goto err_unpin;
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
index 7159688cd303..6d230ba7d8bc 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
@@ -182,6 +182,11 @@ static int shmem_get_pages(struct drm_i915_gem_object *obj)
if (i915_gem_object_needs_bit17_swizzle(obj))
i915_gem_object_do_bit_17_swizzle(obj, st);
+ if (obj->write_domain & I915_GEM_DOMAIN_CPU) {
+ drm_clflush_sg(st);
+ obj->write_domain = 0;
+ obj->cache_dirty = false;
+ }
__i915_gem_object_set_pages(obj, st, sg_page_sizes);
return 0;
--
2.20.1
More information about the Intel-gfx-trybot
mailing list