diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gpu_error.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_gpu_error.c | 75 |
1 files changed, 7 insertions, 68 deletions
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c index 73884a189859..4c1836f0a991 100644 --- a/drivers/gpu/drm/i915/i915_gpu_error.c +++ b/drivers/gpu/drm/i915/i915_gpu_error.c @@ -669,7 +669,7 @@ static void err_print_gt(struct drm_i915_error_state_buf *m, struct intel_gt_coredump *gt) { const struct intel_engine_coredump *ee; - int i, j; + int i; err_printf(m, "GT awake: %s\n", yesno(gt->awake)); err_printf(m, "EIR: 0x%08x\n", gt->eir); @@ -715,17 +715,8 @@ static void err_print_gt(struct drm_i915_error_state_buf *m, const struct i915_vma_coredump *vma; error_print_engine(m, ee); - for (vma = ee->vma; vma; vma = vma->next) print_error_vma(m, ee->engine, vma); - - if (ee->num_requests) { - err_printf(m, "%s --- %d requests\n", - ee->engine->name, - ee->num_requests); - for (j = 0; j < ee->num_requests; j++) - error_print_request(m, " ", &ee->requests[j]); - } } if (gt->uc) @@ -936,7 +927,6 @@ static void cleanup_gt(struct intel_gt_coredump *gt) gt->engine = ee->next; i915_vma_coredump_free(ee->vma); - kfree(ee->requests); kfree(ee); } @@ -1221,54 +1211,6 @@ static void record_request(const struct i915_request *request, rcu_read_unlock(); } -static void engine_record_requests(const struct intel_engine_cs *engine, - struct i915_request *first, - struct intel_engine_coredump *ee) -{ - struct i915_request *request; - int count; - - count = 0; - request = first; - list_for_each_entry_from(request, &engine->active.requests, sched.link) - count++; - if (!count) - return; - - ee->requests = kcalloc(count, sizeof(*ee->requests), ATOMIC_MAYFAIL); - if (!ee->requests) - return; - - ee->num_requests = count; - - count = 0; - request = first; - list_for_each_entry_from(request, - &engine->active.requests, sched.link) { - if (count >= ee->num_requests) { - /* - * If the ring request list was changed in - * between the point where the error request - * list was created and dimensioned and this - * point then just exit early to avoid crashes. - * - * We don't need to communicate that the - * request list changed state during error - * state capture and that the error state is - * slightly incorrect as a consequence since we - * are typically only interested in the request - * list state at the point of error state - * capture, not in any changes happening during - * the capture. - */ - break; - } - - record_request(request, &ee->requests[count++]); - } - ee->num_requests = count; -} - static void engine_record_execlists(struct intel_engine_coredump *ee) { const struct intel_engine_execlists * const el = &ee->engine->execlists; @@ -1480,7 +1422,7 @@ static struct intel_engine_coredump * capture_engine(struct intel_engine_cs *engine, struct i915_vma_compress *compress) { - struct intel_engine_capture_vma *capture; + struct intel_engine_capture_vma *capture = NULL; struct intel_engine_coredump *ee; struct i915_request *rq; unsigned long flags; @@ -1490,19 +1432,16 @@ capture_engine(struct intel_engine_cs *engine, return NULL; spin_lock_irqsave(&engine->active.lock, flags); - rq = intel_engine_find_active_request(engine); - if (!rq) { - spin_unlock_irqrestore(&engine->active.lock, flags); + if (rq) + capture = intel_engine_coredump_add_request(ee, rq, + ATOMIC_MAYFAIL); + spin_unlock_irqrestore(&engine->active.lock, flags); + if (!capture) { kfree(ee); return NULL; } - capture = intel_engine_coredump_add_request(ee, rq, ATOMIC_MAYFAIL); - engine_record_requests(engine, rq, ee); - - spin_unlock_irqrestore(&engine->active.lock, flags); - intel_engine_coredump_add_vma(ee, capture, compress); return ee; |