drm/i915/selftests: Disable heartbeat around hang tests
authorChris Wilson <chris@chris-wilson.co.uk>
Fri, 31 Jan 2020 13:03:19 +0000 (13:03 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Fri, 31 Jan 2020 15:10:02 +0000 (15:10 +0000)
If the heartbeat fires in the middle of the preempt-hang test, it
consumes our forced hang disrupting the test.

Reported-by: Daniel Vetter <daniel.vetter@ffwll.ch>
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/20200131130319.2998318-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/gt/selftest_lrc.c

index c8c83bc..79b9f7d 100644 (file)
@@ -2465,15 +2465,19 @@ static int live_preempt_hang(void *arg)
                I915_USER_PRIORITY(I915_CONTEXT_MIN_USER_PRIORITY);
 
        for_each_engine(engine, gt, id) {
+               unsigned long heartbeat;
                struct i915_request *rq;
 
                if (!intel_engine_has_preemption(engine))
                        continue;
 
+               engine_heartbeat_disable(engine, &heartbeat);
+
                rq = spinner_create_request(&spin_lo, ctx_lo, engine,
                                            MI_ARB_CHECK);
                if (IS_ERR(rq)) {
                        err = PTR_ERR(rq);
+                       engine_heartbeat_enable(engine, heartbeat);
                        goto err_ctx_lo;
                }
 
@@ -2483,6 +2487,7 @@ static int live_preempt_hang(void *arg)
                        GEM_TRACE_DUMP();
                        intel_gt_set_wedged(gt);
                        err = -EIO;
+                       engine_heartbeat_enable(engine, heartbeat);
                        goto err_ctx_lo;
                }
 
@@ -2490,6 +2495,7 @@ static int live_preempt_hang(void *arg)
                                            MI_ARB_CHECK);
                if (IS_ERR(rq)) {
                        igt_spinner_end(&spin_lo);
+                       engine_heartbeat_enable(engine, heartbeat);
                        err = PTR_ERR(rq);
                        goto err_ctx_lo;
                }
@@ -2504,6 +2510,7 @@ static int live_preempt_hang(void *arg)
                        pr_err("Preemption did not occur within timeout!");
                        GEM_TRACE_DUMP();
                        intel_gt_set_wedged(gt);
+                       engine_heartbeat_enable(engine, heartbeat);
                        err = -EIO;
                        goto err_ctx_lo;
                }
@@ -2518,12 +2525,15 @@ static int live_preempt_hang(void *arg)
                        GEM_TRACE("hi spinner failed to start\n");
                        GEM_TRACE_DUMP();
                        intel_gt_set_wedged(gt);
+                       engine_heartbeat_enable(engine, heartbeat);
                        err = -EIO;
                        goto err_ctx_lo;
                }
 
                igt_spinner_end(&spin_hi);
                igt_spinner_end(&spin_lo);
+               engine_heartbeat_enable(engine, heartbeat);
+
                if (igt_flush_test(gt->i915)) {
                        err = -EIO;
                        goto err_ctx_lo;