[PATCH 23/24] drm/i915/gtt: Flush gen7 PD writes to memory prior to GPU access

Chris Wilson chris at chris-wilson.co.uk
Sun Aug 25 18:29:53 UTC 2019


Ensure that our page directory updates for the ppgtt are coherent in
memory prior to use from the GPU. With this we can remove the random
delay we had to impose upon execution.

Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/gt/intel_ringbuffer.c | 1 +
 drivers/gpu/drm/i915/i915_gem_gtt.c        | 3 +++
 2 files changed, 4 insertions(+)

diff --git a/drivers/gpu/drm/i915/gt/intel_ringbuffer.c b/drivers/gpu/drm/i915/gt/intel_ringbuffer.c
index 271aea4279c3..bef52254c55c 100644
--- a/drivers/gpu/drm/i915/gt/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/gt/intel_ringbuffer.c
@@ -930,6 +930,7 @@ static void cancel_requests(struct intel_engine_cs *engine)
 static void i9xx_submit_request(struct i915_request *request)
 {
 	i915_request_submit(request);
+	mb();
 
 	ENGINE_WRITE(request->engine, RING_TAIL,
 		     intel_ring_set_tail(request->ring, request->tail));
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 63945c9bd617..83cb0fefaa30 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -1661,6 +1661,7 @@ static void gen6_ppgtt_insert_entries(struct i915_address_space *vm,
 
 	GEM_BUG_ON(pd->entry[act_pt] == &vm->scratch[1]);
 
+	preempt_disable();
 	vaddr = kmap_atomic_px(i915_pt_entry(pd, act_pt));
 	do {
 		vaddr[act_pte] = pte_encode | GEN6_PTE_ADDR_ENCODE(iter.dma);
@@ -1682,6 +1683,8 @@ static void gen6_ppgtt_insert_entries(struct i915_address_space *vm,
 		}
 	} while (1);
 	kunmap_atomic(vaddr);
+	wbinvd();
+	preempt_enable();
 
 	vma->page_sizes.gtt = I915_GTT_PAGE_SIZE;
 }
-- 
2.23.0



More information about the Intel-gfx-trybot mailing list