diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2021-01-05 22:03:20 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2021-01-06 01:13:39 +0000 |
commit | e230cd8d481ea28ccc11b554d7a34ffca003fb25 (patch) | |
tree | c2ff4519c772965f6d0d9411fb0346a278d44ea0 /tests/i915/gem_ctx_engines.c | |
parent | ac697f7bb9b4c2db92084d1a691be4a8a68d335f (diff) |
i915/gem_ctx_engine: Prerun the spinner to bind offsets before use
Set the spinner and target execbuf up before we start the test; this not
only saves time in recreating the spinner on each loop, but it ensures
that we don't antagonise ourselves by fighting over GTT offsets.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Venkata Sandeep Dhanalakota <venkata.s.dhanalakota@intel.com>
Acked-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Diffstat (limited to 'tests/i915/gem_ctx_engines.c')
-rw-r--r-- | tests/i915/gem_ctx_engines.c | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/tests/i915/gem_ctx_engines.c b/tests/i915/gem_ctx_engines.c index eab0cc40..220aa29a 100644 --- a/tests/i915/gem_ctx_engines.c +++ b/tests/i915/gem_ctx_engines.c @@ -175,8 +175,8 @@ out: static void idempotent(int i915) { - I915_DEFINE_CONTEXT_PARAM_ENGINES(engines , I915_EXEC_RING_MASK + 1); - I915_DEFINE_CONTEXT_PARAM_ENGINES(expected , I915_EXEC_RING_MASK + 1); + I915_DEFINE_CONTEXT_PARAM_ENGINES(engines, I915_EXEC_RING_MASK + 1); + I915_DEFINE_CONTEXT_PARAM_ENGINES(expected, I915_EXEC_RING_MASK + 1); struct drm_i915_gem_context_param p = { .ctx_id = gem_context_create(i915), .param = I915_CONTEXT_PARAM_ENGINES, @@ -316,7 +316,7 @@ static void none(int i915) static void execute_one(int i915) { - I915_DEFINE_CONTEXT_PARAM_ENGINES(engines , I915_EXEC_RING_MASK + 1); + I915_DEFINE_CONTEXT_PARAM_ENGINES(engines, I915_EXEC_RING_MASK + 1); struct drm_i915_gem_context_param param = { .ctx_id = gem_context_create(i915), .param = I915_CONTEXT_PARAM_ENGINES, @@ -333,31 +333,38 @@ static void execute_one(int i915) }; const uint32_t bbe = MI_BATCH_BUFFER_END; const struct intel_execution_engine2 *e; + igt_spin_t *spin; + + /* Prewarm the spinner */ + spin = igt_spin_new(i915, .ctx = param.ctx_id, + .flags = (IGT_SPIN_NO_PREEMPTION | + IGT_SPIN_POLL_RUN)); gem_write(i915, obj.handle, 0, &bbe, sizeof(bbe)); /* Unadulterated I915_EXEC_DEFAULT should work */ execbuf.flags = 0; gem_execbuf(i915, &execbuf); + obj.flags |= EXEC_OBJECT_PINNED; + + igt_spin_end(spin); gem_sync(i915, obj.handle); __for_each_physical_engine(i915, e) { struct drm_i915_gem_busy busy = { .handle = obj.handle }; - for (int i = -1; i <= I915_EXEC_RING_MASK; i++) { - igt_spin_t *spin; + igt_debug("Testing [%s...]\n", e->name); + for (int i = -1; i <= I915_EXEC_RING_MASK; i++) { memset(&engines, 0, sizeof(engines)); engine_class(&engines, 0) = e->class; engine_instance(&engines, 0) = e->instance; param.size = offsetof(typeof(engines), engines[1]); gem_context_set_param(i915, ¶m); - spin = igt_spin_new(i915, - .ctx = param.ctx_id, - .engine = 0, - .flags = (IGT_SPIN_NO_PREEMPTION | - IGT_SPIN_POLL_RUN)); + gem_sync(i915, spin->handle); + igt_spin_reset(spin); + gem_execbuf(i915, &spin->execbuf); igt_debug("Testing with map of %d engines\n", i + 1); memset(&engines.engines, -1, sizeof(engines.engines)); @@ -382,7 +389,7 @@ static void execute_one(int i915) igt_assert_eq(batch_busy(busy.busy), i != -1 ? 1 << e->class : 0); - igt_spin_free(i915, spin); + igt_spin_end(spin); gem_sync(i915, obj.handle); do_ioctl(i915, DRM_IOCTL_I915_GEM_BUSY, &busy); @@ -396,13 +403,15 @@ static void execute_one(int i915) execbuf.flags = 0; gem_execbuf(i915, &execbuf); + igt_spin_free(i915, spin); + gem_close(i915, obj.handle); gem_context_destroy(i915, param.ctx_id); } static void execute_oneforall(int i915) { - I915_DEFINE_CONTEXT_PARAM_ENGINES(engines , I915_EXEC_RING_MASK + 1); + I915_DEFINE_CONTEXT_PARAM_ENGINES(engines, I915_EXEC_RING_MASK + 1); struct drm_i915_gem_context_param param = { .ctx_id = gem_context_create(i915), .param = I915_CONTEXT_PARAM_ENGINES, @@ -440,7 +449,7 @@ static void execute_oneforall(int i915) static void execute_allforone(int i915) { - I915_DEFINE_CONTEXT_PARAM_ENGINES(engines , I915_EXEC_RING_MASK + 1); + I915_DEFINE_CONTEXT_PARAM_ENGINES(engines, I915_EXEC_RING_MASK + 1); struct drm_i915_gem_context_param param = { .ctx_id = gem_context_create(i915), .param = I915_CONTEXT_PARAM_ENGINES, |