On su, 2016-08-07 at 15:45 +0100, Chris Wilson wrote: > With execlists, we have context objects everywhere, not just RCS. So > store them for post-mortem debugging. This also has a secondary effect > of removing one more unsafe list iteration with using preserved state > from the hanging request. And now we can cross-reference the request's > context state with that loaded by the GPU. > > Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
Reviewed-by: Joonas Lahtinen <joonas.lahti...@linux.intel.com> > --- > drivers/gpu/drm/i915/i915_gpu_error.c | 28 ++++------------------------ > 1 file changed, 4 insertions(+), 24 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c > b/drivers/gpu/drm/i915/i915_gpu_error.c > index b94a59733cf8..c621fa23cd28 100644 > --- a/drivers/gpu/drm/i915/i915_gpu_error.c > +++ b/drivers/gpu/drm/i915/i915_gpu_error.c > @@ -1028,28 +1028,6 @@ static void error_record_engine_registers(struct > drm_i915_error_state *error, > } > } > > -static void i915_gem_record_active_context(struct intel_engine_cs *engine, > - struct drm_i915_error_state *error, > - struct drm_i915_error_engine *ee) > -{ > - struct drm_i915_private *dev_priv = engine->i915; > - struct drm_i915_gem_object *obj; > - > - /* Currently render ring is the only HW context user */ > - if (engine->id != RCS || !error->ccid) > - return; > - > - list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) { > - if (!i915_gem_obj_ggtt_bound(obj)) > - continue; > - > - if ((error->ccid & PAGE_MASK) == i915_gem_obj_ggtt_offset(obj)) > { > - ee->ctx = i915_error_ggtt_object_create(dev_priv, obj); > - break; > - } > - } > -} > - > static void i915_gem_record_rings(struct drm_i915_private *dev_priv, > struct drm_i915_error_state *error) > { > @@ -1099,6 +1077,10 @@ static void i915_gem_record_rings(struct > drm_i915_private *dev_priv, > i915_error_ggtt_object_create(dev_priv, > > engine->scratch.obj); > > + ee->ctx = > + i915_error_ggtt_object_create(dev_priv, > + > request->ctx->engine[i].state); > + > if (request->pid) { > struct task_struct *task; > > @@ -1129,8 +1111,6 @@ static void i915_gem_record_rings(struct > drm_i915_private *dev_priv, > ee->wa_ctx = i915_error_ggtt_object_create(dev_priv, > engine->wa_ctx.obj); > > - i915_gem_record_active_context(engine, error, ee); > - > count = 0; > list_for_each_entry(request, &engine->request_list, link) > count++; -- Joonas Lahtinen Open Source Technology Center Intel Corporation _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx