drm/i915: Report all failed registers for ctx isolation
authorMika Kuoppala <mika.kuoppala@linux.intel.com>
Tue, 31 Mar 2020 13:54:03 +0000 (16:54 +0300)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 31 Mar 2020 20:42:12 +0000 (21:42 +0100)
For CI it is enough to point out a single failure
in isolation. However it is beneficial to gather
info in logs for transients further down
the line.

Do not stop into first comparison failure but
continue probing forward.

v2: for all engines and poisons (Chris)

Cc: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20200331135403.16906-1-mika.kuoppala@linux.intel.com
drivers/gpu/drm/i915/gt/selftest_lrc.c

index b929e52a8f5a3f44c1f9d9ae8094afc36b2bc1bd..f3ba58842120f82e71d4cc5f0f40e75c4988b358 100644 (file)
@@ -5171,7 +5171,6 @@ static int compare_isolation(struct intel_engine_cs *engine,
                                               A[0][x], B[0][x], B[1][x],
                                               poison, lrc[dw + 1]);
                                        err = -EINVAL;
-                                       break;
                                }
                        }
                        dw += 2;
@@ -5310,6 +5309,7 @@ static int live_lrc_isolation(void *arg)
                0xffffffff,
                0xffff0000,
        };
+       int err = 0;
 
        /*
         * Our goal is try and verify that per-context state cannot be
@@ -5320,7 +5320,6 @@ static int live_lrc_isolation(void *arg)
         */
 
        for_each_engine(engine, gt, id) {
-               int err = 0;
                int i;
 
                /* Just don't even ask */
@@ -5331,23 +5330,25 @@ static int live_lrc_isolation(void *arg)
                intel_engine_pm_get(engine);
                if (engine->pinned_default_state) {
                        for (i = 0; i < ARRAY_SIZE(poison); i++) {
-                               err = __lrc_isolation(engine, poison[i]);
-                               if (err)
-                                       break;
+                               int result;
 
-                               err = __lrc_isolation(engine, ~poison[i]);
-                               if (err)
-                                       break;
+                               result = __lrc_isolation(engine, poison[i]);
+                               if (result && !err)
+                                       err = result;
+
+                               result = __lrc_isolation(engine, ~poison[i]);
+                               if (result && !err)
+                                       err = result;
                        }
                }
                intel_engine_pm_put(engine);
-               if (igt_flush_test(gt->i915))
+               if (igt_flush_test(gt->i915)) {
                        err = -EIO;
-               if (err)
-                       return err;
+                       break;
+               }
        }
 
-       return 0;
+       return err;
 }
 
 static void garbage_reset(struct intel_engine_cs *engine,