]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
drm/i915/selftests: Keep the engine awake while we keep for preemption
authorChris Wilson <chris@chris-wilson.co.uk>
Thu, 12 Sep 2019 12:26:39 +0000 (13:26 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Thu, 12 Sep 2019 20:02:54 +0000 (21:02 +0100)
Keep the engine awake to ensure that we don't inject any pm-idle
requests.

References: https://bugs.freedesktop.org/show_bug.cgi?id=111108
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Acked-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190912122639.25224-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/gt/selftest_lrc.c

index d791158988d6307245b34f63a4419896d7a9e40e..26d05bd1bdc8b26d09cb1e9bea3bc08fd5c4e99c 100644 (file)
@@ -897,6 +897,10 @@ static int live_suppress_self_preempt(void *arg)
                if (!intel_engine_has_preemption(engine))
                        continue;
 
+               if (igt_flush_test(i915, I915_WAIT_LOCKED))
+                       goto err_wedged;
+
+               intel_engine_pm_get(engine);
                engine->execlists.preempt_hang.count = 0;
 
                rq_a = spinner_create_request(&a.spin,
@@ -904,12 +908,14 @@ static int live_suppress_self_preempt(void *arg)
                                              MI_NOOP);
                if (IS_ERR(rq_a)) {
                        err = PTR_ERR(rq_a);
+                       intel_engine_pm_put(engine);
                        goto err_client_b;
                }
 
                i915_request_add(rq_a);
                if (!igt_wait_for_spinner(&a.spin, rq_a)) {
                        pr_err("First client failed to start\n");
+                       intel_engine_pm_put(engine);
                        goto err_wedged;
                }
 
@@ -921,6 +927,7 @@ static int live_suppress_self_preempt(void *arg)
                                                      MI_NOOP);
                        if (IS_ERR(rq_b)) {
                                err = PTR_ERR(rq_b);
+                               intel_engine_pm_put(engine);
                                goto err_client_b;
                        }
                        i915_request_add(rq_b);
@@ -931,6 +938,7 @@ static int live_suppress_self_preempt(void *arg)
 
                        if (!igt_wait_for_spinner(&b.spin, rq_b)) {
                                pr_err("Second client failed to start\n");
+                               intel_engine_pm_put(engine);
                                goto err_wedged;
                        }
 
@@ -944,10 +952,12 @@ static int live_suppress_self_preempt(void *arg)
                               engine->name,
                               engine->execlists.preempt_hang.count,
                               depth);
+                       intel_engine_pm_put(engine);
                        err = -EINVAL;
                        goto err_client_b;
                }
 
+               intel_engine_pm_put(engine);
                if (igt_flush_test(i915, I915_WAIT_LOCKED))
                        goto err_wedged;
        }