From b5109e62cea170f3550588119d41a9bcf79789e5 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Thu, 23 Jan 2014 21:50:36 +0000 Subject: [PATCH] intel_error_decode: Protect against missing ring registers A dodgy kernel may miss printing out the ring registers leading to a FPE. Signed-off-by: Chris Wilson --- tools/intel_error_decode.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tools/intel_error_decode.c b/tools/intel_error_decode.c index ac0b194..fff2aed 100644 --- a/tools/intel_error_decode.c +++ b/tools/intel_error_decode.c @@ -309,15 +309,14 @@ print_fence(unsigned int devid, uint64_t fence) #define MAX_RINGS 10 /* I really hope this never... */ uint32_t head[MAX_RINGS]; int head_ndx = 0; -int num_rings = -1; +int num_rings = 0; static void print_batch(int is_batch, const char *ring_name, uint32_t gtt_offset) { const char *buffer_type[2] = { "ringbuffer", "batchbuffer" }; - if (is_batch) { + if (is_batch || !num_rings) printf("%s (%s) at 0x%08x\n", buffer_type[is_batch], ring_name, gtt_offset); - } else { + else printf("%s (%s) at 0x%08x; HEAD points to: 0x%08x\n", buffer_type[is_batch], ring_name, gtt_offset, head[head_ndx++ % num_rings] + gtt_offset); - } } static void decode(struct drm_intel_decode *ctx, bool is_batch, @@ -418,7 +417,7 @@ read_data_file(FILE *file) matched = sscanf(line, " HEAD: 0x%08x\n", ®); if (matched == 1) { - head[head_ndx++] = print_head(reg); + head[num_rings++] = print_head(reg); } matched = sscanf(line, " ACTHD: 0x%08x\n", ®); -- 2.7.4