error decode: Search for first i915_error_state

Handy for multi-GPU systems where the IGFX may not be first.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
diff --git a/tools/intel_error_decode.c b/tools/intel_error_decode.c
index a11c918..a27ade9 100644
--- a/tools/intel_error_decode.c
+++ b/tools/intel_error_decode.c
@@ -344,10 +344,10 @@
 
     if (argc == 1) {
 	if (isatty(0)) {
-	    path = "/debug/dri/0";
+	    path = "/debug/dri";
 	    err = stat (path, &st);
 	    if (err != 0) {
-		path = "/sys/kernel/debug/dri/0";
+		path = "/sys/kernel/debug/dri";
 		err = stat (path, &st);
 		if (err != 0) {
 		    errx(1,
@@ -370,21 +370,37 @@
 	}
     }
 
-    if (S_ISDIR (st.st_mode))
+    if (S_ISDIR (st.st_mode)) {
 	asprintf (&filename, "%s/i915_error_state", path);
-    else
-	filename = (char *) path;
-
-    file = fopen(filename, "r");
-    if (file) {
-	read_data_file (file);
-	fclose (file);
+	file = fopen(filename, "r");
+	if (!file) {
+	    int minor;
+	    for (minor = 0; minor < 64; minor++) {
+		free(filename);
+		asprintf(&filename, "%s/%d/i915_error_state", path, minor);
+		file = fopen(filename, "r");
+		if (file)
+		    break;
+	    }
+	}
+	if (!file) {
+	    fprintf (stderr, "Failed to find i915_error_state beneath %s\n",
+		     path);
+	    exit (1);
+	}
     } else {
-	fprintf (stderr, "Failed to open %s: %s\n",
-		 filename, strerror (errno));
-	exit (1);
+	filename = (char *) path;
+	file = fopen(filename, "r");
+	if (!file) {
+	    fprintf (stderr, "Failed to open %s: %s\n",
+		     filename, strerror (errno));
+	    exit (1);
+	}
     }
 
+    read_data_file (file);
+    fclose (file);
+
     if (filename != path)
 	free (filename);