summaryrefslogtreecommitdiff
path: root/tests/gem_exec_schedule.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2018-02-21 14:13:16 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2018-02-23 16:42:36 +0000
commit305ebcedc36e98f3118ac27a5bbde0ce7cd71a74 (patch)
tree3e392be546ac6e667b13ad6b494d724ab4822707 /tests/gem_exec_schedule.c
parentf9b6fd624be9692e9a892c0976fa72cedefc9fed (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.c31
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));
}