Skip to content

Commit

Permalink
drm/i915: Record default HW state in the GPU error state
Browse files Browse the repository at this point in the history
It may be of interest to both compare the active HW context against the
default (aka NULL) context, to see what has been changed and if either are
corrupt.

v2: Rename the fake vma as fake.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20171126220901.14735-1-chris@chris-wilson.co.uk
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
  • Loading branch information
Chris Wilson committed Nov 27, 2017
1 parent c82297f commit 4e90a6e
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 0 deletions.
1 change: 1 addition & 0 deletions drivers/gpu/drm/i915/i915_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
23 changes: 23 additions & 0 deletions drivers/gpu/drm/i915/i915_gpu_error.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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 fake = {
.node = { .start = U64_MAX, .size = obj->base.size },
.pages = obj->mm.pages,
.obj = obj,
};

return i915_error_object_create(dev_priv, &fake);
} else {
return NULL;
}
}

static void i915_gem_record_rings(struct drm_i915_private *dev_priv,
struct i915_gpu_state *error)
{
Expand Down Expand Up @@ -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);
}
}

Expand Down

0 comments on commit 4e90a6e

Please sign in to comment.