summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2014-01-23 21:50:36 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2014-01-23 21:51:57 +0000
commitb5109e62cea170f3550588119d41a9bcf79789e5 (patch)
treed4087c6855b9f96866f643e5e4edbd7ae4ce16a4
parent4a9b70c3262a30e70207583cc23da67bba538437 (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>
-rw-r--r--tools/intel_error_decode.c9
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", &reg);
if (matched == 1) {
- head[head_ndx++] = print_head(reg);
+ head[num_rings++] = print_head(reg);
}
matched = sscanf(line, " ACTHD: 0x%08x\n", &reg);