error decode: Search for first i915_error_state
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 25 Jan 2011 16:34:08 +0000 (16:34 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 1 Feb 2011 13:37:56 +0000 (13:37 +0000)
Handy for multi-GPU systems where the IGFX may not be first.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
tools/intel_error_decode.c

index a11c918..a27ade9 100644 (file)
@@ -344,10 +344,10 @@ main (int argc, char *argv[])
 
     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 @@ main (int argc, char *argv[])
        }
     }
 
-    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);