]> git.openpandora.org Git - pandora-kernel.git/commitdiff
drm/i915: Record pid/comm of hanging task
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 25 Feb 2014 15:11:24 +0000 (17:11 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 5 Mar 2014 20:30:24 +0000 (21:30 +0100)
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>
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_gem.c
drivers/gpu/drm/i915/i915_gpu_error.c

index fe4427be2e03e21e1c128d001f82b438e4e0a384..826fcaef25c1bc23bfb5f770357582befc4214bd 100644 (file)
@@ -360,7 +360,7 @@ struct drm_i915_error_state {
                        int page_count;
                        u32 gtt_offset;
                        u32 *pages[0];
-               } *ringbuffer, *batchbuffer, *ctx, *hws_page;
+               } *ringbuffer, *batchbuffer, *wa_batchbuffer, *ctx, *hws_page;
 
                struct drm_i915_error_request {
                        long jiffies;
@@ -375,6 +375,9 @@ struct drm_i915_error_state {
                                u32 pp_dir_base;
                        };
                } vm_info;
+
+               pid_t pid;
+               char comm[TASK_COMM_LEN];
        } ring[I915_NUM_RINGS];
        struct drm_i915_error_buffer {
                u32 size;
@@ -1797,6 +1800,7 @@ struct drm_i915_gem_request {
 
 struct drm_i915_file_private {
        struct drm_i915_private *dev_priv;
+       struct drm_file *file;
 
        struct {
                spinlock_t lock;
Simple merge
Simple merge