diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2014-01-23 21:50:36 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2014-01-23 21:51:57 +0000 |
commit | b5109e62cea170f3550588119d41a9bcf79789e5 (patch) | |
tree | d4087c6855b9f96866f643e5e4edbd7ae4ce16a4 /tools | |
parent | 4a9b70c3262a30e70207583cc23da67bba538437 (diff) |
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 <chris@chris-wilson.co.uk>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/intel_error_decode.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/tools/intel_error_decode.c b/tools/intel_error_decode.c index ac0b194c..fff2aed5 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", ®); |