Skip to content

Commit

Permalink
drm/i915: Include the kernel uptime in the error state
Browse files Browse the repository at this point in the history
As well as knowing when the error occurred, it is more interesting to me
to know how long after booting the error occurred, and for good measure
record the time since last hw initialisation.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20161025121602.1457-1-chris@chris-wilson.co.uk
  • Loading branch information
Chris Wilson committed Oct 25, 2016
1 parent 7ef54de commit de867c2
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 2 deletions.
4 changes: 4 additions & 0 deletions drivers/gpu/drm/i915/i915_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -746,6 +746,8 @@ struct intel_display_error_state;
struct drm_i915_error_state {
struct kref ref;
struct timeval time;
struct timeval boottime;
struct timeval uptime;

struct drm_i915_private *i915;

Expand Down Expand Up @@ -2099,6 +2101,8 @@ struct drm_i915_private {
* off the idle_work.
*/
struct delayed_work idle_work;

ktime_t last_init_time;
} gt;

/* perform PHY state sanity checks? */
Expand Down
2 changes: 2 additions & 0 deletions drivers/gpu/drm/i915/i915_gem.c
Original file line number Diff line number Diff line change
Expand Up @@ -4470,6 +4470,8 @@ i915_gem_init_hw(struct drm_device *dev)
enum intel_engine_id id;
int ret;

dev_priv->gt.last_init_time = ktime_get();

/* Double layer security blanket, see i915_gem_init() */
intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL);

Expand Down
12 changes: 10 additions & 2 deletions drivers/gpu/drm/i915/i915_gpu_error.c
Original file line number Diff line number Diff line change
Expand Up @@ -546,9 +546,13 @@ int i915_error_state_to_str(struct drm_i915_error_state_buf *m,
}

err_printf(m, "%s\n", error->error_msg);
err_printf(m, "Time: %ld s %ld us\n", error->time.tv_sec,
error->time.tv_usec);
err_printf(m, "Kernel: " UTS_RELEASE "\n");
err_printf(m, "Time: %ld s %ld us\n",
error->time.tv_sec, error->time.tv_usec);
err_printf(m, "Boottime: %ld s %ld us\n",
error->boottime.tv_sec, error->boottime.tv_usec);
err_printf(m, "Uptime: %ld s %ld us\n",
error->uptime.tv_sec, error->uptime.tv_usec);
err_print_capabilities(m, &error->device_info);
max_hangcheck_score = 0;
for (i = 0; i < ARRAY_SIZE(error->engine); i++) {
Expand Down Expand Up @@ -1549,6 +1553,10 @@ static int capture(void *data)
i915_gem_capture_guc_log_buffer(error->i915, error);

do_gettimeofday(&error->time);
error->boottime = ktime_to_timeval(ktime_get_boottime());
error->uptime =
ktime_to_timeval(ktime_sub(ktime_get(),
error->i915->gt.last_init_time));

error->overlay = intel_overlay_capture_error_state(error->i915);
error->display = intel_display_capture_error_state(error->i915);
Expand Down

0 comments on commit de867c2

Please sign in to comment.