summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_gem.c
diff options
context:
space:
mode:
authorChris Wilson2014-02-25 16:11:24 +0100
committerDaniel Vetter2014-03-05 21:30:24 +0100
commitab0e7ff9f2d0bfe139a2ed5bb6a36f8cbd4e0886 (patch)
tree66a0a24af927cffbb34a25d0c0190d1a4507cecc /drivers/gpu/drm/i915/i915_gem.c
parentdrm/i915: Rely on accurate request tracking for finding hung batches (diff)
downloadkernel-qcow2-linux-ab0e7ff9f2d0bfe139a2ed5bb6a36f8cbd4e0886.tar.gz
kernel-qcow2-linux-ab0e7ff9f2d0bfe139a2ed5bb6a36f8cbd4e0886.tar.xz
kernel-qcow2-linux-ab0e7ff9f2d0bfe139a2ed5bb6a36f8cbd4e0886.zip
drm/i915: Record pid/comm of hanging task
After finding the guilty batch and request, we can use it to find the process that submitted the batch and then add the culprit into the error state. This is a slightly different approach from Ben's in that instead of adding the extra information into the struct i915_hw_context, we use the information already captured in struct drm_file which is then referenced from the request. v2: Also capture the workaround buffer for gen2, so that we can compare its contents against the intended batch for the active request. v3: Rebase (Mika) v4: Check for null context (Chris) checkpatch warnings fixed Link: http://lists.freedesktop.org/archives/intel-gfx/2013-August/032280.html Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> (v2) Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com> (v4) Acked-by: Ben Widawsky <ben@bwidawsk.net> Cc: Ben Widawsky <ben@bwidawsk.net> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem.c')
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index c5a182be2eb0..6e17b45db850 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -4857,6 +4857,7 @@ int i915_gem_open(struct drm_device *dev, struct drm_file *file)
file->driver_priv = file_priv;
file_priv->dev_priv = dev->dev_private;
+ file_priv->file = file;
spin_lock_init(&file_priv->mm.lock);
INIT_LIST_HEAD(&file_priv->mm.request_list);