提交 27b85bea 编写于 作者: A Akash Goel 提交者: Tvrtko Ursulin

drm/i915: Augment i915 error state to include the dump of GuC log buffer

Added the dump of GuC log buffer to i915 error state, as the contents of
GuC log buffer would also be useful to determine that why the GPU reset
was triggered.

v2:
- For uniformity use existing helper function print_error_obj() to
  dump out contents of GuC log buffer, pretty printing is better left
  to userspace. (Chris)
- Skip the dumping of GuC log buffer when logging is disabled as it
  won't be of any use.
- Rebase.

v3: Rebase.
Suggested-by: NChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: NAkash Goel <akash.goel@intel.com>
Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
上级 72c0bc66
...@@ -778,6 +778,7 @@ struct drm_i915_error_state { ...@@ -778,6 +778,7 @@ struct drm_i915_error_state {
struct intel_overlay_error_state *overlay; struct intel_overlay_error_state *overlay;
struct intel_display_error_state *display; struct intel_display_error_state *display;
struct drm_i915_error_object *semaphore; struct drm_i915_error_object *semaphore;
struct drm_i915_error_object *guc_log;
struct drm_i915_error_engine { struct drm_i915_error_engine {
int engine_id; int engine_id;
......
...@@ -702,6 +702,8 @@ int i915_error_state_to_str(struct drm_i915_error_state_buf *m, ...@@ -702,6 +702,8 @@ int i915_error_state_to_str(struct drm_i915_error_state_buf *m,
print_error_obj(m, NULL, "Semaphores", error->semaphore); print_error_obj(m, NULL, "Semaphores", error->semaphore);
print_error_obj(m, NULL, "GuC log buffer", error->guc_log);
if (error->overlay) if (error->overlay)
intel_overlay_print_error_state(m, error->overlay); intel_overlay_print_error_state(m, error->overlay);
...@@ -782,6 +784,7 @@ static void i915_error_state_free(struct kref *error_ref) ...@@ -782,6 +784,7 @@ static void i915_error_state_free(struct kref *error_ref)
} }
i915_error_object_free(error->semaphore); i915_error_object_free(error->semaphore);
i915_error_object_free(error->guc_log);
for (i = 0; i < ARRAY_SIZE(error->active_bo); i++) for (i = 0; i < ARRAY_SIZE(error->active_bo); i++)
kfree(error->active_bo[i]); kfree(error->active_bo[i]);
...@@ -1408,6 +1411,17 @@ static void i915_capture_pinned_buffers(struct drm_i915_private *dev_priv, ...@@ -1408,6 +1411,17 @@ static void i915_capture_pinned_buffers(struct drm_i915_private *dev_priv,
error->pinned_bo = bo; error->pinned_bo = bo;
} }
static void i915_gem_capture_guc_log_buffer(struct drm_i915_private *dev_priv,
struct drm_i915_error_state *error)
{
/* Capturing log buf contents won't be useful if logging was disabled */
if (!dev_priv->guc.log.vma || (i915.guc_log_level < 0))
return;
error->guc_log = i915_error_object_create(dev_priv,
dev_priv->guc.log.vma);
}
/* Capture all registers which don't fit into another category. */ /* Capture all registers which don't fit into another category. */
static void i915_capture_reg_state(struct drm_i915_private *dev_priv, static void i915_capture_reg_state(struct drm_i915_private *dev_priv,
struct drm_i915_error_state *error) struct drm_i915_error_state *error)
...@@ -1532,6 +1546,7 @@ static int capture(void *data) ...@@ -1532,6 +1546,7 @@ static int capture(void *data)
i915_gem_record_rings(error->i915, error); i915_gem_record_rings(error->i915, error);
i915_capture_active_buffers(error->i915, error); i915_capture_active_buffers(error->i915, error);
i915_capture_pinned_buffers(error->i915, error); i915_capture_pinned_buffers(error->i915, error);
i915_gem_capture_guc_log_buffer(error->i915, error);
do_gettimeofday(&error->time); do_gettimeofday(&error->time);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册