[PATCH 2/2] ban-scratch-overwrite

Chris Wilson chris at chris-wilson.co.uk
Tue Jul 14 13:41:54 UTC 2020


---
 drivers/gpu/drm/i915/gt/intel_lrc.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c
index e0280a672f1d..87b9f76cf80e 100644
--- a/drivers/gpu/drm/i915/gt/intel_lrc.c
+++ b/drivers/gpu/drm/i915/gt/intel_lrc.c
@@ -3305,10 +3305,29 @@ check_redzone(const void *vaddr, const struct intel_engine_cs *engine)
 			     engine->name);
 }
 
+static void check_scratch(struct intel_context *ce)
+{
+	struct i915_page_scratch *scratch = &ce->vm->scratch[0];
+	void *vaddr;
+
+	if (!IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))
+		return;
+
+	vaddr = kmap(scratch->base.page);
+	if (memchr_inv(vaddr, POISON_FREE, PAGE_SIZE)) {
+		drm_err(&ce->engine->i915->drm,
+			"%s scratch page overwritten!\n",
+			ce->engine->name);
+		intel_context_set_banned(ce);
+	}
+	kunmap(scratch->base.page);
+}
+
 static void execlists_context_unpin(struct intel_context *ce)
 {
 	check_redzone((void *)ce->lrc_reg_state - LRC_STATE_OFFSET,
 		      ce->engine);
+	check_scratch(ce);
 
 	i915_gem_object_unpin_map(ce->state->obj);
 }
-- 
2.20.1



More information about the Intel-gfx-trybot mailing list