diff mbox

[7/7] drm/i915: Add comment how we treat hung contexts

Message ID 1484668747-9120-7-git-send-email-mika.kuoppala@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Mika Kuoppala Jan. 17, 2017, 3:59 p.m. UTC
Explain in a comment how and why we treat hung
context like we do.

Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com>
---
 drivers/gpu/drm/i915/i915_gem.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

Comments

Chris Wilson Jan. 17, 2017, 4:10 p.m. UTC | #1
On Tue, Jan 17, 2017 at 05:59:07PM +0200, Mika Kuoppala wrote:
> Explain in a comment how and why we treat hung
> context like we do.
> 
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com>

Series Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
-Chris
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 3e10e81..7e0a0de 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2697,6 +2697,27 @@  static bool i915_gem_reset_request(struct drm_i915_gem_request *request)
 	/* Read once and return the resolution */
 	const bool guilty = engine_stalled(request->engine);
 
+	/* The guilty request will get skipped on a hung engine.
+	 *
+	 * Users of client default context do not rely on logical
+	 * state preserved between batches so it is safe to execute
+	 * queued requests following the hang. Non default context
+	 * rely on preserved state so skipping a batch loses the
+	 * evolution of the state and it needs to be considered corrupted.
+	 * Executing more queued batches on top of corrupted state is
+	 * risky. But we take the risk by trying to advance through
+	 * the queued requests in order to make the client behaviour
+	 * more predictable around resets, by not throwing away random
+	 * amount of batches it has prepared for execution. Sophisticated
+	 * clients can use gem_reset_stats_ioctl and dma fence status
+	 * to observe when it loses the context state and should
+	 * rebuild accordingly.
+	 *
+	 * Context ban and ultimately the client ban mechanism are safety
+	 * valves if a context state vs client submission ends up resulting
+	 * nothing more than a subsequent hangs.
+	 */
+
 	if (guilty) {
 		i915_gem_context_mark_guilty(request->ctx);
 		skip_request(request);