summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2017-11-12 11:46:37 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2017-11-17 14:15:37 +0000
commit9fb5344bab2540e3d12a7d3a94c2a3801a6fec36 (patch)
tree5bbcdf875238c78cd9af63118d9ab1108cbb5cea /tools
parent8934f722e15fe00de993f6e802ab7f96e749d2bb (diff)
tools/error_decode: Print ASCII user buffers
Look at the first 16 characters of the user buffer and if they are all printable, assume that user buffer contains ASCII data (e.g. a debug log) that we want to simply print out. Otherwise, we treat it as a binary data and hexdump as before. Tvrtko: you know you could just write this as a printf (d'oh) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/intel_error_decode.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/tools/intel_error_decode.c b/tools/intel_error_decode.c
index cdef3b18..8924026a 100644
--- a/tools/intel_error_decode.c
+++ b/tools/intel_error_decode.c
@@ -51,6 +51,7 @@
#include <assert.h>
#include <intel_bufmgr.h>
#include <zlib.h>
+#include <ctype.h>
#include "intel_chipset.h"
#include "intel_io.h"
@@ -434,6 +435,16 @@ print_fault_data(unsigned devid, uint32_t data1, uint32_t data0)
#define MAX_RINGS 10 /* I really hope this never... */
+static bool maybe_ascii(const void *data, int check)
+{
+ const char *c = data;
+ while (check--) {
+ if (!isprint(*c++))
+ return false;
+ }
+ return true;
+}
+
static void decode(struct drm_intel_decode *ctx,
const char *buffer_name,
const char *ring_name,
@@ -458,6 +469,8 @@ static void decode(struct drm_intel_decode *ctx,
drm_intel_decode_set_batch_pointer(ctx, data, gtt_offset,
*count);
drm_intel_decode(ctx);
+ } else if (maybe_ascii(data, 16)) {
+ printf("%*s\n", 4 * *count, (char *)data);
} else {
for (int i = 0; i + 4 <= *count; i += 4)
printf("[%04x] %08x %08x %08x %08x\n",