[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