Commit de867c20 authored by Chris Wilson's avatar Chris Wilson

drm/i915: Include the kernel uptime in the error state

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: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20161025121602.1457-1-chris@chris-wilson.co.uk
parent 7ef54de7
...@@ -746,6 +746,8 @@ struct intel_display_error_state; ...@@ -746,6 +746,8 @@ struct intel_display_error_state;
struct drm_i915_error_state { struct drm_i915_error_state {
struct kref ref; struct kref ref;
struct timeval time; struct timeval time;
struct timeval boottime;
struct timeval uptime;
struct drm_i915_private *i915; struct drm_i915_private *i915;
...@@ -2099,6 +2101,8 @@ struct drm_i915_private { ...@@ -2099,6 +2101,8 @@ struct drm_i915_private {
* off the idle_work. * off the idle_work.
*/ */
struct delayed_work idle_work; struct delayed_work idle_work;
ktime_t last_init_time;
} gt; } gt;
/* perform PHY state sanity checks? */ /* perform PHY state sanity checks? */
......
...@@ -4470,6 +4470,8 @@ i915_gem_init_hw(struct drm_device *dev) ...@@ -4470,6 +4470,8 @@ i915_gem_init_hw(struct drm_device *dev)
enum intel_engine_id id; enum intel_engine_id id;
int ret; int ret;
dev_priv->gt.last_init_time = ktime_get();
/* Double layer security blanket, see i915_gem_init() */ /* Double layer security blanket, see i915_gem_init() */
intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL); intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL);
......
...@@ -546,9 +546,13 @@ int i915_error_state_to_str(struct drm_i915_error_state_buf *m, ...@@ -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, "%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, "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); err_print_capabilities(m, &error->device_info);
max_hangcheck_score = 0; max_hangcheck_score = 0;
for (i = 0; i < ARRAY_SIZE(error->engine); i++) { for (i = 0; i < ARRAY_SIZE(error->engine); i++) {
...@@ -1549,6 +1553,10 @@ static int capture(void *data) ...@@ -1549,6 +1553,10 @@ static int capture(void *data)
i915_gem_capture_guc_log_buffer(error->i915, error); i915_gem_capture_guc_log_buffer(error->i915, error);
do_gettimeofday(&error->time); 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->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