diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2019-03-06 14:25:01 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2019-03-08 09:34:49 +0000 |
commit | 3123ada8eb5dd8889d25d63b5a0943f08b2d4390 (patch) | |
tree | cba33ebaab898479be1fe4d41b6b0e6cd14fc7a5 | |
parent | 209d73530d7effed2acf7e5b88ea5cf8c73a800b (diff) | |
download | talos-op-linux-3123ada8eb5dd8889d25d63b5a0943f08b2d4390.tar.gz talos-op-linux-3123ada8eb5dd8889d25d63b5a0943f08b2d4390.zip |
drm/i915/selftests: Check preemption support on each engine
Check that we have setup on preemption for the engine before testing,
instead warn if it is not enabled on supported HW.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190306142517.22558-28-chris@chris-wilson.co.uk
-rw-r--r-- | drivers/gpu/drm/i915/selftests/intel_lrc.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/selftests/intel_lrc.c b/drivers/gpu/drm/i915/selftests/intel_lrc.c index 565e949a4722..d61520ea03c1 100644 --- a/drivers/gpu/drm/i915/selftests/intel_lrc.c +++ b/drivers/gpu/drm/i915/selftests/intel_lrc.c @@ -88,6 +88,9 @@ static int live_preempt(void *arg) if (!HAS_LOGICAL_RING_PREEMPTION(i915)) return 0; + if (!(i915->caps.scheduler & I915_SCHEDULER_CAP_PREEMPTION)) + pr_err("Logical preemption supported, but not exposed\n"); + mutex_lock(&i915->drm.struct_mutex); wakeref = intel_runtime_pm_get(i915); @@ -112,6 +115,9 @@ static int live_preempt(void *arg) for_each_engine(engine, i915, id) { struct i915_request *rq; + if (!intel_engine_has_preemption(engine)) + continue; + rq = igt_spinner_create_request(&spin_lo, ctx_lo, engine, MI_ARB_CHECK); if (IS_ERR(rq)) { @@ -203,6 +209,9 @@ static int live_late_preempt(void *arg) for_each_engine(engine, i915, id) { struct i915_request *rq; + if (!intel_engine_has_preemption(engine)) + continue; + rq = igt_spinner_create_request(&spin_lo, ctx_lo, engine, MI_ARB_CHECK); if (IS_ERR(rq)) { @@ -335,6 +344,9 @@ static int live_suppress_self_preempt(void *arg) struct i915_request *rq_a, *rq_b; int depth; + if (!intel_engine_has_preemption(engine)) + continue; + engine->execlists.preempt_hang.count = 0; rq_a = igt_spinner_create_request(&a.spin, @@ -481,6 +493,9 @@ static int live_suppress_wait_preempt(void *arg) for_each_engine(engine, i915, id) { int depth; + if (!intel_engine_has_preemption(engine)) + continue; + if (!engine->emit_init_breadcrumb) continue; @@ -602,6 +617,9 @@ static int live_chain_preempt(void *arg) }; int count, i; + if (!intel_engine_has_preemption(engine)) + continue; + for_each_prime_number_from(count, 1, 32) { /* must fit ring! */ struct i915_request *rq; |