[RFC v6 2/9] drm/i915/guc: Sanitize engine submission on disable

Michal Wajdeczko michal.wajdeczko at intel.com
Tue Apr 3 17:35:15 UTC 2018


WIP v3

Signed-off-by: Michal Wajdeczko <michal.wajdeczko at intel.com>
---
 drivers/gpu/drm/i915/intel_guc_submission.c | 30 +++++++++++++++++++++++++----
 1 file changed, 26 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_guc_submission.c b/drivers/gpu/drm/i915/intel_guc_submission.c
index 749f279..ac0b560 100644
--- a/drivers/gpu/drm/i915/intel_guc_submission.c
+++ b/drivers/gpu/drm/i915/intel_guc_submission.c
@@ -1247,17 +1247,39 @@ int intel_guc_submission_enable(struct intel_guc *guc)
 	return 0;
 }
 
+static void no_submission_tasklet(unsigned long data)
+{
+	struct intel_engine_cs *engine = (struct intel_engine_cs *)data;
+
+	DRM_DEBUG_DRIVER("%s unexpected execlist tasklet\n", engine->name);
+}
+
+static void nop_submit_request(struct i915_request *request)
+{
+	DRM_DEBUG_DRIVER("%s fence %llx:%d -> -EIO\n",
+		  request->engine->name,
+		  request->fence.context, request->fence.seqno);
+
+	dma_fence_set_error(&request->fence, -EIO);
+	i915_request_submit(request);
+}
+
 void intel_guc_submission_disable(struct intel_guc *guc)
 {
 	struct drm_i915_private *dev_priv = guc_to_i915(guc);
+	struct intel_engine_cs *engine;
+	enum intel_engine_id id;
 
-	GEM_BUG_ON(dev_priv->gt.awake); /* GT should be parked first */
+	for_each_engine(engine, dev_priv, id) {
+		engine->execlists.tasklet.func = no_submission_tasklet;
+		engine->submit_request = nop_submit_request;
+		engine->schedule = NULL;
+		engine->park = NULL;
+		engine->unpark = NULL;
+	}
 
 	guc_interrupts_release(dev_priv);
 	guc_clients_doorbell_fini(guc);
-
-	/* Revert back to manual ELSP submission */
-	intel_engines_reset_default_submission(dev_priv);
 }
 
 #if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
-- 
1.9.1



More information about the Intel-gfx-trybot mailing list