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

Chris Wilson chris at chris-wilson.co.uk
Sun Aug 25 17:11:31 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 d6e2f5b3dd62..66729835701c 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