]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/i915/selftests: Relax timeout for error-interrupt reset processing
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 10 Feb 2020 20:57:18 +0000 (20:57 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 11 Feb 2020 15:33:50 +0000 (15:33 +0000)
We can not require that the system process a tasklet in reasonable time
(thanks be to ksoftirqd), but we can insist that having waited
sufficiently for the error interrupt to have been raised and having
kicked the tasklet, the reset has begun and the request will be marked
as in error (if not already completed).

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

index 82fa0712808e469eacb286affa03dc4bb8ca2c04..78dfa7a8767bc44126c6420d62f544dbfafb0978 100644 (file)
@@ -500,14 +500,21 @@ static int live_error_interrupt(void *arg)
                        }
 
                        for (i = 0; i < ARRAY_SIZE(client); i++) {
-                               if (i915_request_wait(client[i], 0, HZ / 5) < 0) {
-                                       pr_err("%s: %s request still executing!\n",
-                                              engine->name,
-                                              error_repr(p->error[i]));
+                               if (i915_request_wait(client[i], 0, HZ / 5) < 0)
+                                       pr_debug("%s: %s request incomplete!\n",
+                                                engine->name,
+                                                error_repr(p->error[i]));
+
+                               if (!i915_request_started(client[i])) {
+                                       pr_debug("%s: %s request not stated!\n",
+                                                engine->name,
+                                                error_repr(p->error[i]));
                                        err = -ETIME;
                                        goto out;
                                }
 
+                               /* Kick the tasklet to process the error */
+                               intel_engine_flush_submission(engine);
                                if (client[i]->fence.error != p->error[i]) {
                                        pr_err("%s: %s request completed with wrong error code: %d\n",
                                               engine->name,