drm/i915: Drop rq->ring->vma peeking from error capture
authorChris Wilson <chris@chris-wilson.co.uk>
Fri, 24 Apr 2020 19:14:10 +0000 (20:14 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Fri, 24 Apr 2020 21:14:35 +0000 (22:14 +0100)
We only hold the active spinlock while dumping the error state, and this
does not prevent another thread from retiring the request -- as it is
quite possible that despite us capturing the current state, the GPU has
completed the request. As such, it is dangerous to dereference state
below the request as it may already be freed, and the simplest way to
avoid the danger is not include it in the error state.

Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/1788
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Cc: Andi Shyti <andi.shyti@intel.com>
Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200424191410.27570-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_gpu_error.c
drivers/gpu/drm/i915/i915_gpu_error.h

index 424ad975a3608874a0b2867d8951584999f9c3c2..4d54dba353027388da5517543652876cde629ae8 100644 (file)
@@ -467,14 +467,14 @@ static void error_print_request(struct drm_i915_error_state_buf *m,
        if (!erq->seqno)
                return;
 
-       err_printf(m, "%s pid %d, seqno %8x:%08x%s%s, prio %d, start %08x, head %08x, tail %08x\n",
+       err_printf(m, "%s pid %d, seqno %8x:%08x%s%s, prio %d, head %08x, tail %08x\n",
                   prefix, erq->pid, erq->context, erq->seqno,
                   test_bit(DMA_FENCE_FLAG_SIGNALED_BIT,
                            &erq->flags) ? "!" : "",
                   test_bit(DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT,
                            &erq->flags) ? "+" : "",
                   erq->sched_attr.priority,
-                  erq->start, erq->head, erq->tail);
+                  erq->head, erq->tail);
 }
 
 static void error_print_context(struct drm_i915_error_state_buf *m,
@@ -1213,7 +1213,6 @@ static void record_request(const struct i915_request *request,
        erq->context = request->fence.context;
        erq->seqno = request->fence.seqno;
        erq->sched_attr = request->sched.attr;
-       erq->start = i915_ggtt_offset(request->ring->vma);
        erq->head = request->head;
        erq->tail = request->tail;
 
index 0d1f6c8ff3556fa3d8923692741272045141358e..fa2d82a6de04b93a5f3372ac4ce809ded7c7bb81 100644 (file)
@@ -50,7 +50,6 @@ struct i915_request_coredump {
        pid_t pid;
        u32 context;
        u32 seqno;
-       u32 start;
        u32 head;
        u32 tail;
        struct i915_sched_attr sched_attr;