It may be of interest to both compare the active HW context against the
default (or NULL) context, to see what has been changed and if either are
corrupt.

Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuopp...@linux.intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h       |  1 +
 drivers/gpu/drm/i915/i915_gpu_error.c | 23 +++++++++++++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index d575a56fc100..50a945d3c11d 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1009,6 +1009,7 @@ struct i915_gpu_state {
                long user_bo_count;
 
                struct drm_i915_error_object *wa_ctx;
+               struct drm_i915_error_object *default_state;
 
                struct drm_i915_error_request {
                        long jiffies;
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c 
b/drivers/gpu/drm/i915/i915_gpu_error.c
index 3d18d67d065f..c52a4c4b5e83 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.c
+++ b/drivers/gpu/drm/i915/i915_gpu_error.c
@@ -791,6 +791,9 @@ int i915_error_state_to_str(struct drm_i915_error_state_buf 
*m,
 
                print_error_obj(m, dev_priv->engine[i],
                                "WA batchbuffer", ee->wa_batchbuffer);
+
+               print_error_obj(m, dev_priv->engine[i],
+                               "NULL context", ee->default_state);
        }
 
        if (error->overlay)
@@ -1414,6 +1417,23 @@ static void request_record_user_bo(struct 
drm_i915_gem_request *request,
        ee->user_bo_count = count;
 }
 
+static struct drm_i915_error_object *
+capture_object(struct drm_i915_private *dev_priv,
+              struct drm_i915_gem_object *obj)
+{
+       if (obj && i915_gem_object_has_pages(obj)) {
+               struct i915_vma vma = {
+                       .node = { .start = U64_MAX, .size = obj->base.size },
+                       .pages = obj->mm.pages,
+                       .obj = obj,
+               };
+
+               return i915_error_object_create(dev_priv, &vma);
+       } else {
+               return NULL;
+       }
+}
+
 static void i915_gem_record_rings(struct drm_i915_private *dev_priv,
                                  struct i915_gpu_state *error)
 {
@@ -1485,6 +1505,9 @@ static void i915_gem_record_rings(struct drm_i915_private 
*dev_priv,
 
                ee->wa_ctx =
                        i915_error_object_create(dev_priv, engine->wa_ctx.vma);
+
+               ee->default_state =
+                       capture_object(dev_priv, engine->default_state);
        }
 }
 
-- 
2.15.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to