summaryrefslogtreecommitdiff
path: root/tests/i915/gem_wait.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2020-04-01 10:09:21 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2020-04-01 11:05:45 +0100
commitfed920b4ae275d8644f1cc3d8adf37f3a22fc721 (patch)
tree958ad0ce415e8f7d891123adc0e8fea9cd0a674b /tests/i915/gem_wait.c
parentd7beb89944467f9a32c00ba761aca625721a5f6d (diff)
i915/gem_wait: Dynamise per-engine discovery
Make the declaration of per-engine tests dynamic Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Acked-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Diffstat (limited to 'tests/i915/gem_wait.c')
-rw-r--r--tests/i915/gem_wait.c137
1 files changed, 52 insertions, 85 deletions
diff --git a/tests/i915/gem_wait.c b/tests/i915/gem_wait.c
index 71f8bb5a..5b711253 100644
--- a/tests/i915/gem_wait.c
+++ b/tests/i915/gem_wait.c
@@ -74,9 +74,11 @@ static void basic(int fd, unsigned engine, unsigned flags)
IGT_CORK_HANDLE(cork);
uint32_t plug =
flags & (WRITE | AWAIT) ? igt_cork_plug(&cork, fd) : 0;
- igt_spin_t *spin = igt_spin_new(fd,
- .engine = engine,
- .dependency = plug);
+ igt_spin_t *spin =
+ igt_spin_new(fd,
+ .engine = engine,
+ .dependency = plug,
+ .flags = (flags & HANG) ? IGT_SPIN_NO_PREEMPTION : 0);
struct drm_i915_gem_wait wait = {
flags & WRITE ? plug : spin->handle
};
@@ -132,9 +134,29 @@ static void basic(int fd, unsigned engine, unsigned flags)
igt_spin_free(fd, spin);
}
-igt_main
+static void test_all_engines(const char *name, int i915, unsigned int test)
{
const struct intel_execution_engine2 *e;
+
+ igt_subtest_with_dynamic(name) {
+ igt_dynamic("all") {
+ gem_quiescent_gpu(i915);
+ basic(i915, ALL_ENGINES, test);
+ gem_quiescent_gpu(i915);
+ }
+
+ __for_each_physical_engine(i915, e) {
+ igt_dynamic_f("%s", e->name) {
+ gem_quiescent_gpu(i915);
+ basic(i915, e->flags, test);
+ gem_quiescent_gpu(i915);
+ }
+ }
+ }
+}
+
+igt_main
+{
int fd = -1;
igt_fixture {
@@ -149,56 +171,25 @@ igt_main
invalid_buf(fd);
igt_subtest_group {
+ static const struct {
+ const char *name;
+ unsigned int flags;
+ } tests[] = {
+ { "busy", BUSY },
+ { "wait", 0 },
+ { "await", AWAIT },
+ { "write-busy", BUSY | WRITE },
+ { "write-wait", WRITE },
+ { }
+ };
+
igt_fixture {
igt_fork_hang_detector(fd);
igt_fork_signal_helper();
}
- igt_subtest("basic-busy-all") {
- gem_quiescent_gpu(fd);
- basic(fd, ALL_ENGINES, BUSY);
- }
- igt_subtest("basic-wait-all") {
- gem_quiescent_gpu(fd);
- basic(fd, ALL_ENGINES, 0);
- }
- igt_subtest("basic-await-all") {
- gem_quiescent_gpu(fd);
- basic(fd, ALL_ENGINES, AWAIT);
- }
- igt_subtest("basic-busy-write-all") {
- gem_quiescent_gpu(fd);
- basic(fd, ALL_ENGINES, BUSY | WRITE);
- }
- igt_subtest("basic-wait-write-all") {
- gem_quiescent_gpu(fd);
- basic(fd, ALL_ENGINES, WRITE);
- }
-
- __for_each_physical_engine(fd, e) {
- igt_subtest_group {
- igt_subtest_f("busy-%s", e->name) {
- gem_quiescent_gpu(fd);
- basic(fd, e->flags, BUSY);
- }
- igt_subtest_f("wait-%s", e->name) {
- gem_quiescent_gpu(fd);
- basic(fd, e->flags, 0);
- }
- igt_subtest_f("await-%s", e->name) {
- gem_quiescent_gpu(fd);
- basic(fd, e->flags, AWAIT);
- }
- igt_subtest_f("write-busy-%s", e->name) {
- gem_quiescent_gpu(fd);
- basic(fd, e->flags, BUSY | WRITE);
- }
- igt_subtest_f("write-wait-%s", e->name) {
- gem_quiescent_gpu(fd);
- basic(fd, e->flags, WRITE);
- }
- }
- }
+ for (const typeof(*tests) *t = tests; t->name; t++)
+ test_all_engines(t->name, fd, t->flags);
igt_fixture {
igt_stop_signal_helper();
@@ -207,6 +198,16 @@ igt_main
}
igt_subtest_group {
+ static const struct {
+ const char *name;
+ unsigned int flags;
+ } tests[] = {
+ { "hang-busy", HANG | BUSY },
+ { "hang-wait", HANG },
+ { "hang-busy-write", HANG | WRITE | BUSY},
+ { "hang-wait-write", HANG | WRITE },
+ { }
+ };
igt_hang_t hang;
igt_fixture {
@@ -214,42 +215,8 @@ igt_main
igt_fork_signal_helper();
}
- igt_subtest("hang-busy-all") {
- gem_quiescent_gpu(fd);
- basic(fd, ALL_ENGINES, BUSY | HANG);
- }
- igt_subtest("hang-wait-all") {
- gem_quiescent_gpu(fd);
- basic(fd, ALL_ENGINES, HANG);
- }
-
- igt_subtest("hang-busy-write-all") {
- gem_quiescent_gpu(fd);
- basic(fd, ALL_ENGINES, BUSY | WRITE | HANG);
- }
- igt_subtest("hang-wait-write-all") {
- gem_quiescent_gpu(fd);
- basic(fd, ALL_ENGINES, WRITE | HANG);
- }
-
- __for_each_physical_engine(fd, e) {
- igt_subtest_f("hang-busy-%s", e->name) {
- gem_quiescent_gpu(fd);
- basic(fd, e->flags, HANG | BUSY);
- }
- igt_subtest_f("hang-wait-%s", e->name) {
- gem_quiescent_gpu(fd);
- basic(fd, e->flags, HANG);
- }
- igt_subtest_f("hang-busy-write-%s", e->name) {
- gem_quiescent_gpu(fd);
- basic(fd, e->flags, HANG | WRITE | BUSY);
- }
- igt_subtest_f("hang-wait-write-%s", e->name) {
- gem_quiescent_gpu(fd);
- basic(fd, e->flags, HANG | WRITE);
- }
- }
+ for (const typeof(*tests) *t = tests; t->name; t++)
+ test_all_engines(t->name, fd, t->flags);
igt_fixture {
igt_stop_signal_helper();