[igt-dev] [PATCH i-g-t] i915/gem_spin_batch: Convert to dynamic engine discovery
Chris Wilson
chris at chris-wilson.co.uk
Mon Jan 4 10:43:24 UTC 2021
Only run the tests on the available engines using igt_dynamic. This
prevents flip-flops with SKIP on shards that have a mixture of machine
types (e.g. shard-icl that has some machines with vcs1 and some
without).
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
---
tests/i915/gem_spin_batch.c | 82 ++++++++++++++++++-------------------
1 file changed, 39 insertions(+), 43 deletions(-)
diff --git a/tests/i915/gem_spin_batch.c b/tests/i915/gem_spin_batch.c
index 0a5cfdf36..c2ce2373b 100644
--- a/tests/i915/gem_spin_batch.c
+++ b/tests/i915/gem_spin_batch.c
@@ -35,7 +35,7 @@
#x, #ref, (long long)x, tolerance, (long long)ref)
static void spin(int fd,
- const struct intel_execution_engine2 *e2,
+ unsigned int engine,
unsigned int flags,
unsigned int timeout_sec)
{
@@ -46,10 +46,10 @@ static void spin(int fd,
struct timespec itv = { };
uint64_t elapsed;
- spin = __igt_spin_new(fd, .engine = e2->flags, .flags = flags);
+ spin = __igt_spin_new(fd, .engine = engine, .flags = flags);
while ((elapsed = igt_nsec_elapsed(&tv)) >> 30 < timeout_sec) {
igt_spin_t *next =
- __igt_spin_new(fd, .engine = e2->flags, .flags = flags);
+ __igt_spin_new(fd, .engine = engine, .flags = flags);
igt_spin_set_timeout(spin,
timeout_100ms - igt_nsec_elapsed(&itv));
@@ -75,14 +75,13 @@ static void spin(int fd,
#define RESUBMIT_NEW_CTX (1 << 0)
#define RESUBMIT_ALL_ENGINES (1 << 1)
-static void spin_resubmit(int fd, const struct intel_execution_engine2 *e2,
- unsigned int flags)
+static void spin_resubmit(int fd, unsigned int engine, unsigned int flags)
{
const uint32_t ctx0 = gem_context_clone_with_engines(fd, 0);
const uint32_t ctx1 =
(flags & RESUBMIT_NEW_CTX) ?
gem_context_clone_with_engines(fd, 0) : ctx0;
- igt_spin_t *spin = __igt_spin_new(fd, .ctx = ctx0, .engine = e2->flags);
+ igt_spin_t *spin = __igt_spin_new(fd, .ctx = ctx0, .engine = engine);
const struct intel_execution_engine2 *other;
struct drm_i915_gem_execbuffer2 eb = {
@@ -96,14 +95,14 @@ static void spin_resubmit(int fd, const struct intel_execution_engine2 *e2,
if (flags & RESUBMIT_ALL_ENGINES) {
for_each_context_engine(fd, ctx1, other) {
- if (gem_engine_is_equal(other, e2))
+ if (other->flags == engine)
continue;
eb.flags = other->flags;
gem_execbuf(fd, &eb);
}
} else {
- eb.flags = e2->flags;
+ eb.flags = engine;
gem_execbuf(fd, &eb);
}
@@ -132,7 +131,7 @@ spin_on_all_engines(int fd, unsigned long flags, unsigned int timeout_sec)
__for_each_physical_engine(fd, e2) {
igt_fork(child, 1) {
igt_install_exit_handler(spin_exit_handler);
- spin(fd, e2, flags, timeout_sec);
+ spin(fd, e2->flags, flags, timeout_sec);
}
}
@@ -181,7 +180,6 @@ igt_main
{
const struct intel_execution_engine2 *e2;
const struct intel_execution_ring *e;
- struct intel_execution_engine2 e2__;
int fd = -1;
igt_fixture {
@@ -190,51 +188,49 @@ igt_main
igt_fork_hang_detector(fd);
}
- for (e = intel_execution_rings; e->name; e++) {
- e2__ = gem_eb_flags_to_engine(eb_ring(e));
- if (e2__.flags == -1)
- continue;
- e2 = &e2__;
+#define test_each_legacy_ring(test) \
+ igt_subtest_with_dynamic(test) \
+ for (e = intel_execution_rings; e->name; e++) \
+ if (gem_has_ring(fd, eb_ring(e))) \
+ igt_dynamic_f("%s", e->name)
- igt_subtest_f("legacy-%s", e->name) {
- igt_require(gem_has_ring(fd, eb_ring(e)));
- spin(fd, e2, 0, 3);
- }
+ test_each_legacy_ring("legacy")
+ spin(fd, eb_ring(e), 0, 3);
+ test_each_legacy_ring("legacy-resubmit")
+ spin_resubmit(fd, eb_ring(e), 0);
+ test_each_legacy_ring("legacy-resubmit-new")
+ spin_resubmit(fd, eb_ring(e), RESUBMIT_NEW_CTX);
- igt_subtest_f("legacy-resubmit-%s", e->name) {
- igt_require(gem_has_ring(fd, eb_ring(e)));
- spin_resubmit(fd, e2, 0);
- }
-
- igt_subtest_f("legacy-resubmit-new-%s", e->name) {
- igt_require(gem_has_ring(fd, eb_ring(e)));
- spin_resubmit(fd, e2, RESUBMIT_NEW_CTX);
- }
- }
+#undef test_each_legcy_ring
igt_subtest("spin-all")
spin_all(fd, 0);
igt_subtest("spin-all-new")
spin_all(fd, PARALLEL_SPIN_NEW_CTX);
- __for_each_physical_engine(fd, e2) {
- igt_subtest_f("%s", e2->name)
- spin(fd, e2, 0, 3);
+#define test_each_engine(test) \
+ igt_subtest_with_dynamic(test) \
+ __for_each_physical_engine(fd, e2) \
+ igt_dynamic_f("%s", e2->name)
- igt_subtest_f("resubmit-%s", e2->name)
- spin_resubmit(fd, e2, 0);
+ test_each_engine("engines")
+ spin(fd, e2->flags, 0, 3);
- igt_subtest_f("resubmit-new-%s", e2->name)
- spin_resubmit(fd, e2, RESUBMIT_NEW_CTX);
+ test_each_engine("resubmit")
+ spin_resubmit(fd, e2->flags, 0);
- igt_subtest_f("resubmit-all-%s", e2->name)
- spin_resubmit(fd, e2, RESUBMIT_ALL_ENGINES);
+ test_each_engine("resubmit-new")
+ spin_resubmit(fd, e2->flags, RESUBMIT_NEW_CTX);
- igt_subtest_f("resubmit-new-all-%s", e2->name)
- spin_resubmit(fd, e2,
- RESUBMIT_NEW_CTX |
- RESUBMIT_ALL_ENGINES);
- }
+ test_each_engine("resubmit-all")
+ spin_resubmit(fd, e2->flags, RESUBMIT_ALL_ENGINES);
+
+ test_each_engine("resubmit-new-all")
+ spin_resubmit(fd, e2->flags,
+ RESUBMIT_NEW_CTX |
+ RESUBMIT_ALL_ENGINES);
+
+#undef test_each_engine
igt_subtest("spin-each")
spin_on_all_engines(fd, 0, 3);
--
2.30.0
More information about the igt-dev
mailing list