Commit 0397ac13 authored by Michal Wajdeczko's avatar Michal Wajdeczko Committed by Chris Wilson

drm/i915: Make GuC log part of the uC error state

We keep details of GuC and HuC in separate error state struct.
Make GuC log part of it to group all related data together.
Since we are printing uC details at the end, with this change
GuC log will be moved there too.

v2: comment on new placement of the log (Chris)
Signed-off-by: default avatarMichal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20171026173657.49648-2-michal.wajdeczko@intel.comReviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
parent 7d41ef34
...@@ -916,6 +916,7 @@ struct i915_gpu_state { ...@@ -916,6 +916,7 @@ struct i915_gpu_state {
struct i915_error_uc { struct i915_error_uc {
struct intel_uc_fw guc_fw; struct intel_uc_fw guc_fw;
struct intel_uc_fw huc_fw; struct intel_uc_fw huc_fw;
struct drm_i915_error_object *guc_log;
} uc; } uc;
/* Generic register state */ /* Generic register state */
...@@ -941,7 +942,6 @@ struct i915_gpu_state { ...@@ -941,7 +942,6 @@ struct i915_gpu_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;
......
...@@ -618,6 +618,7 @@ static void err_print_uc(struct drm_i915_error_state_buf *m, ...@@ -618,6 +618,7 @@ static void err_print_uc(struct drm_i915_error_state_buf *m,
intel_uc_fw_dump(&error_uc->guc_fw, &p); intel_uc_fw_dump(&error_uc->guc_fw, &p);
intel_uc_fw_dump(&error_uc->huc_fw, &p); intel_uc_fw_dump(&error_uc->huc_fw, &p);
print_error_obj(m, NULL, "GuC log buffer", error_uc->guc_log);
} }
int i915_error_state_to_str(struct drm_i915_error_state_buf *m, int i915_error_state_to_str(struct drm_i915_error_state_buf *m,
...@@ -794,8 +795,6 @@ int i915_error_state_to_str(struct drm_i915_error_state_buf *m, ...@@ -794,8 +795,6 @@ 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);
...@@ -869,6 +868,7 @@ static void cleanup_uc_state(struct i915_gpu_state *error) ...@@ -869,6 +868,7 @@ static void cleanup_uc_state(struct i915_gpu_state *error)
kfree(error_uc->guc_fw.path); kfree(error_uc->guc_fw.path);
kfree(error_uc->huc_fw.path); kfree(error_uc->huc_fw.path);
i915_error_object_free(error_uc->guc_log);
} }
void __i915_gpu_state_free(struct kref *error_ref) void __i915_gpu_state_free(struct kref *error_ref)
...@@ -897,7 +897,6 @@ void __i915_gpu_state_free(struct kref *error_ref) ...@@ -897,7 +897,6 @@ void __i915_gpu_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]);
...@@ -1619,17 +1618,7 @@ static void capture_uc_state(struct i915_gpu_state *error) ...@@ -1619,17 +1618,7 @@ static void capture_uc_state(struct i915_gpu_state *error)
*/ */
error_uc->guc_fw.path = kstrdup(i915->guc.fw.path, GFP_ATOMIC); error_uc->guc_fw.path = kstrdup(i915->guc.fw.path, GFP_ATOMIC);
error_uc->huc_fw.path = kstrdup(i915->huc.fw.path, GFP_ATOMIC); error_uc->huc_fw.path = kstrdup(i915->huc.fw.path, GFP_ATOMIC);
} error_uc->guc_log = i915_error_object_create(i915, i915->guc.log.vma);
static void i915_gem_capture_guc_log_buffer(struct drm_i915_private *dev_priv,
struct i915_gpu_state *error)
{
/* Capturing log buf contents won't be useful if logging was disabled */
if (!dev_priv->guc.log.vma || (i915_modparams.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. */
...@@ -1780,7 +1769,6 @@ static int capture(void *data) ...@@ -1780,7 +1769,6 @@ 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);
error->overlay = intel_overlay_capture_error_state(error->i915); error->overlay = intel_overlay_capture_error_state(error->i915);
error->display = intel_display_capture_error_state(error->i915); error->display = intel_display_capture_error_state(error->i915);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment