summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugeni Dodonov <eugeni.dodonov@intel.com>2012-02-01 23:29:03 -0200
committerEugeni Dodonov <eugeni.dodonov@intel.com>2012-02-01 23:46:46 -0200
commit70bdf49059818f648ea24fb4e171e619a898cb88 (patch)
tree8ff2fa1ec508407a9ea75733ae8a39fa327025c7
parentb48cdbba5a08ac322322704e3ade1f153103f0a0 (diff)
drm/i915: dump active clients when detecting a hung GPUhangcheck_test
This will avoid guessing about active processes possible causing the issue and could help tracking individual processes objects. Signed-off-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
-rw-r--r--drivers/gpu/drm/i915/i915_irq.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 85281e9de6b..68a77ad0e34 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -895,6 +895,7 @@ static void i915_capture_error_state(struct drm_device *dev)
struct drm_i915_error_state *error;
unsigned long flags;
int i, pipe;
+ struct drm_file *priv;
spin_lock_irqsave(&dev_priv->error_lock, flags);
error = dev_priv->first_error;
@@ -909,6 +910,22 @@ static void i915_capture_error_state(struct drm_device *dev)
return;
}
+ DRM_INFO("dumping active drm clients:\n");
+ list_for_each_entry(priv, &dev->filelist, lhead) {
+ struct pid *p;
+ struct task_struct *tsk = NULL;
+
+ p = find_get_pid(priv->pid);
+ if (p)
+ tsk = get_pid_task(p, PIDTYPE_PID);
+
+ DRM_INFO(" pid=%5d [%s] uid=%5d",
+ priv->pid,
+ (tsk) ? tsk->comm : "unknown",
+ priv->uid);
+ }
+ DRM_INFO("\n");
+
DRM_INFO("capturing error event; look for more information in /debug/dri/%d/i915_error_state\n",
dev->primary->index);