live_preempt_hang's use of hang injection has been superseded by
live_preempt_reset's use of an non-preemptable spinner. The latter does
not require intrusive hacks into the code.

Signed-off-by: Chris Wilson <[email protected]>
---
 drivers/gpu/drm/i915/gt/intel_engine.h       |  20 ---
 drivers/gpu/drm/i915/gt/intel_engine_types.h |   1 -
 drivers/gpu/drm/i915/gt/intel_lrc.c          |   8 +-
 drivers/gpu/drm/i915/gt/selftest_lrc.c       | 122 -------------------
 4 files changed, 4 insertions(+), 147 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_engine.h 
b/drivers/gpu/drm/i915/gt/intel_engine.h
index b36ec1fddc3d..29c8c03c5caa 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine.h
+++ b/drivers/gpu/drm/i915/gt/intel_engine.h
@@ -305,26 +305,6 @@ intel_engine_find_active_request(struct intel_engine_cs 
*engine);
 
 u32 intel_engine_context_size(struct intel_gt *gt, u8 class);
 
-#if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
-
-static inline bool inject_preempt_hang(struct intel_engine_execlists 
*execlists)
-{
-       if (!execlists->preempt_hang.inject_hang)
-               return false;
-
-       complete(&execlists->preempt_hang.completion);
-       return true;
-}
-
-#else
-
-static inline bool inject_preempt_hang(struct intel_engine_execlists 
*execlists)
-{
-       return false;
-}
-
-#endif
-
 void intel_engine_init_active(struct intel_engine_cs *engine,
                              unsigned int subclass);
 #define ENGINE_PHYSICAL        0
diff --git a/drivers/gpu/drm/i915/gt/intel_engine_types.h 
b/drivers/gpu/drm/i915/gt/intel_engine_types.h
index 45e36d963ea7..b23366a81048 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine_types.h
+++ b/drivers/gpu/drm/i915/gt/intel_engine_types.h
@@ -127,7 +127,6 @@ DECLARE_EWMA(_engine_latency, 6, 4)
 struct st_preempt_hang {
        struct completion completion;
        unsigned int count;
-       bool inject_hang;
 };
 
 /**
diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c 
b/drivers/gpu/drm/i915/gt/intel_lrc.c
index 230470c58ec9..929be03bbe7e 100644
--- a/drivers/gpu/drm/i915/gt/intel_lrc.c
+++ b/drivers/gpu/drm/i915/gt/intel_lrc.c
@@ -2296,19 +2296,19 @@ static void process_csb(struct intel_engine_cs *engine)
                if (promote) {
                        struct i915_request * const *old = execlists->active;
 
+                       GEM_BUG_ON(!assert_pending_valid(execlists, "promote"));
+
+                       ring_set_paused(engine, 0);
+
                        /* Point active to the new ELSP; prevent overwriting */
                        WRITE_ONCE(execlists->active, execlists->pending);
 
-                       if (!inject_preempt_hang(execlists))
-                               ring_set_paused(engine, 0);
-
                        /* cancel old inflight, prepare for switch */
                        trace_ports(execlists, "preempted", old);
                        while (*old)
                                execlists_schedule_out(*old++);
 
                        /* switch pending to inflight */
-                       GEM_BUG_ON(!assert_pending_valid(execlists, "promote"));
                        WRITE_ONCE(execlists->active,
                                   memcpy(execlists->inflight,
                                          execlists->pending,
diff --git a/drivers/gpu/drm/i915/gt/selftest_lrc.c 
b/drivers/gpu/drm/i915/gt/selftest_lrc.c
index 79b9f7d092e4..7ef68500b2bd 100644
--- a/drivers/gpu/drm/i915/gt/selftest_lrc.c
+++ b/drivers/gpu/drm/i915/gt/selftest_lrc.c
@@ -2431,127 +2431,6 @@ static int live_preempt_gang(void *arg)
        return 0;
 }
 
-static int live_preempt_hang(void *arg)
-{
-       struct intel_gt *gt = arg;
-       struct i915_gem_context *ctx_hi, *ctx_lo;
-       struct igt_spinner spin_hi, spin_lo;
-       struct intel_engine_cs *engine;
-       enum intel_engine_id id;
-       int err = -ENOMEM;
-
-       if (!HAS_LOGICAL_RING_PREEMPTION(gt->i915))
-               return 0;
-
-       if (!intel_has_reset_engine(gt))
-               return 0;
-
-       if (igt_spinner_init(&spin_hi, gt))
-               return -ENOMEM;
-
-       if (igt_spinner_init(&spin_lo, gt))
-               goto err_spin_hi;
-
-       ctx_hi = kernel_context(gt->i915);
-       if (!ctx_hi)
-               goto err_spin_lo;
-       ctx_hi->sched.priority =
-               I915_USER_PRIORITY(I915_CONTEXT_MAX_USER_PRIORITY);
-
-       ctx_lo = kernel_context(gt->i915);
-       if (!ctx_lo)
-               goto err_ctx_hi;
-       ctx_lo->sched.priority =
-               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;
-               }
-
-               i915_request_add(rq);
-               if (!igt_wait_for_spinner(&spin_lo, rq)) {
-                       GEM_TRACE("lo spinner failed to start\n");
-                       GEM_TRACE_DUMP();
-                       intel_gt_set_wedged(gt);
-                       err = -EIO;
-                       engine_heartbeat_enable(engine, heartbeat);
-                       goto err_ctx_lo;
-               }
-
-               rq = spinner_create_request(&spin_hi, ctx_hi, engine,
-                                           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;
-               }
-
-               init_completion(&engine->execlists.preempt_hang.completion);
-               engine->execlists.preempt_hang.inject_hang = true;
-
-               i915_request_add(rq);
-
-               if 
(!wait_for_completion_timeout(&engine->execlists.preempt_hang.completion,
-                                                HZ / 10)) {
-                       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;
-               }
-
-               set_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
-               intel_engine_reset(engine, NULL);
-               clear_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
-
-               engine->execlists.preempt_hang.inject_hang = false;
-
-               if (!igt_wait_for_spinner(&spin_hi, rq)) {
-                       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;
-               }
-       }
-
-       err = 0;
-err_ctx_lo:
-       kernel_context_close(ctx_lo);
-err_ctx_hi:
-       kernel_context_close(ctx_hi);
-err_spin_lo:
-       igt_spinner_fini(&spin_lo);
-err_spin_hi:
-       igt_spinner_fini(&spin_hi);
-       return err;
-}
-
 static int live_preempt_timeout(void *arg)
 {
        struct intel_gt *gt = arg;
@@ -3750,7 +3629,6 @@ int intel_execlists_live_selftests(struct 
drm_i915_private *i915)
                SUBTEST(live_suppress_wait_preempt),
                SUBTEST(live_chain_preempt),
                SUBTEST(live_preempt_gang),
-               SUBTEST(live_preempt_hang),
                SUBTEST(live_preempt_timeout),
                SUBTEST(live_preempt_smoke),
                SUBTEST(live_virtual_engine),
-- 
2.25.0

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to