diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2018-02-21 14:13:16 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2018-02-23 16:42:36 +0000 |
commit | 305ebcedc36e98f3118ac27a5bbde0ce7cd71a74 (patch) | |
tree | 3e392be546ac6e667b13ad6b494d724ab4822707 /tests/gem_exec_schedule.c | |
parent | f9b6fd624be9692e9a892c0976fa72cedefc9fed (diff) |
Iterate over physical engines
We current have a single for_each_engine() iterator which we use to
generate both a set of uABI engines and a set of physical engines.
Determining what uABI ring-id corresponds to an actual HW engine is
tricky, so pull that out to a library function and introduce
for_each_physical_engine() for cases where we want to issue requests
once on each HW ring (avoiding aliasing issues).
v2: Remember can_store_dword for gem_sync
v3: Find more open-coded for_each_physical
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Diffstat (limited to 'tests/gem_exec_schedule.c')
-rw-r--r-- | tests/gem_exec_schedule.c | 31 |
1 files changed, 9 insertions, 22 deletions
diff --git a/tests/gem_exec_schedule.c b/tests/gem_exec_schedule.c index 94a80ecd..8a69ab5c 100644 --- a/tests/gem_exec_schedule.c +++ b/tests/gem_exec_schedule.c @@ -161,17 +161,6 @@ static void fifo(int fd, unsigned ring) munmap(ptr, 4096); } -static bool ignore_engine(int fd, unsigned engine) -{ - if (engine == 0) - return true; - - if (gem_has_bsd2(fd) && engine == I915_EXEC_BSD) - return true; - - return false; -} - static void smoketest(int fd, unsigned ring, unsigned timeout) { const int ncpus = sysconf(_SC_NPROCESSORS_ONLN); @@ -183,12 +172,8 @@ static void smoketest(int fd, unsigned ring, unsigned timeout) nengine = 0; if (ring == -1) { - for_each_engine(fd, engine) { - if (ignore_engine(fd, engine)) - continue; - + for_each_physical_engine(fd, engine) engines[nengine++] = engine; - } } else { engines[nengine++] = ring; } @@ -416,7 +401,7 @@ static void preempt_other(int fd, unsigned ring) gem_context_set_priority(fd, ctx[HI], MAX_PRIO); n = 0; - for_each_engine(fd, other) { + for_each_physical_engine(fd, other) { igt_assert(n < ARRAY_SIZE(spin)); spin[n] = __igt_spin_batch_new(fd, ctx[NOISE], other, 0); @@ -472,7 +457,7 @@ static void preempt_self(int fd, unsigned ring) n = 0; gem_context_set_priority(fd, ctx[HI], MIN_PRIO); - for_each_engine(fd, other) { + for_each_physical_engine(fd, other) { spin[n] = __igt_spin_batch_new(fd, ctx[NOISE], other, 0); store_dword(fd, ctx[HI], other, result, (n + 1)*sizeof(uint32_t), n + 1, @@ -950,7 +935,7 @@ igt_main continue; igt_subtest_f("fifo-%s", e->name) { - gem_require_ring(fd, e->exec_id | e->flags); + igt_require(gem_ring_has_physical_engine(fd, e->exec_id | e->flags)); igt_require(gem_can_store_dword(fd, e->exec_id) | e->flags); fifo(fd, e->exec_id | e->flags); } @@ -967,13 +952,12 @@ igt_main smoketest(fd, -1, 30); for (e = intel_execution_engines; e->name; e++) { - /* default exec-id is purely symbolic */ if (e->exec_id == 0) continue; igt_subtest_group { igt_fixture { - gem_require_ring(fd, e->exec_id | e->flags); + igt_require(gem_ring_has_physical_engine(fd, e->exec_id | e->flags)); igt_require(gem_can_store_dword(fd, e->exec_id) | e->flags); } @@ -1050,9 +1034,12 @@ igt_main } for (e = intel_execution_engines; e->name; e++) { + if (e->exec_id == 0) + continue; + igt_subtest_group { igt_fixture { - gem_require_ring(fd, e->exec_id | e->flags); + igt_require(gem_ring_has_physical_engine(fd, e->exec_id | e->flags)); igt_require(gem_scheduler_has_preemption(fd)); } |