[PATCH i-g-t 3/3] tests/gem_exec_fence: Restore checks in *await-hang scenarios
Janusz Krzysztofik
janusz.krzysztofik at linux.intel.com
Thu Aug 4 12:01:39 UTC 2022
Fix and reenable checks that have been disabled in *await-hang scenarios
by commit "tests/gem_exec_fence: Check stored values only for valid
workloads".
Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik at linux.intel.com>
---
tests/i915/gem_exec_fence.c | 52 +++++++++++++++++++--------
tests/intel-ci/blacklist.txt | 1 -
tests/intel-ci/fast-feedback.testlist | 2 ++
3 files changed, 39 insertions(+), 16 deletions(-)
diff --git a/tests/i915/gem_exec_fence.c b/tests/i915/gem_exec_fence.c
index 11d99781b0..1e73091cdb 100644
--- a/tests/i915/gem_exec_fence.c
+++ b/tests/i915/gem_exec_fence.c
@@ -309,10 +309,10 @@ static void test_fence_await(int fd, const intel_ctx_t *ctx,
{
const struct intel_execution_engine2 *e2;
uint32_t scratch = gem_create(fd, 4096);
- igt_spin_t *spin;
+ igt_spin_t *spin, *invalid_spin;
uint32_t *out;
uint64_t scratch_offset, ahnd = get_reloc_ahnd(fd, ctx->id);
- int i;
+ int out_fence, i;
scratch_offset = get_offset(ahnd, scratch, 4096, 0);
@@ -325,10 +325,25 @@ static void test_fence_await(int fd, const intel_ctx_t *ctx,
.ctx = ctx,
.engine = e->flags,
.flags = IGT_SPIN_FENCE_OUT |
- IGT_SPIN_POLL_RUN |
- spin_hang(flags));
+ IGT_SPIN_POLL_RUN);
igt_assert(spin->out_fence != -1);
+ if (flags & HANG) {
+ invalid_spin = igt_spin_new(fd,
+ .ahnd = ahnd,
+ .ctx = ctx,
+ .engine = e->flags,
+ .fence = spin->out_fence,
+ .flags = IGT_SPIN_FENCE_IN |
+ IGT_SPIN_FENCE_OUT |
+ IGT_SPIN_POLL_RUN |
+ spin_hang(flags));
+ igt_assert(invalid_spin->out_fence != -1);
+ out_fence = invalid_spin->out_fence;
+ } else {
+ out_fence = spin->out_fence;
+ }
+
i = 0;
for_each_ctx_engine(fd, ctx, e2) {
if (!gem_class_can_store_dword(fd, e2->class))
@@ -337,12 +352,12 @@ static void test_fence_await(int fd, const intel_ctx_t *ctx,
i++;
if (flags & NONBLOCK) {
- igt_store_word(fd, ahnd, ctx, e2, spin->out_fence,
+ igt_store_word(fd, ahnd, ctx, e2, out_fence,
scratch, scratch_offset, i, i);
} else {
igt_fork(child, 1) {
ahnd = get_reloc_ahnd(fd, ctx->id);
- igt_store_word(fd, ahnd, ctx, e2, spin->out_fence,
+ igt_store_word(fd, ahnd, ctx, e2, out_fence,
scratch, scratch_offset, i, i);
put_ahnd(ahnd);
}
@@ -353,26 +368,33 @@ static void test_fence_await(int fd, const intel_ctx_t *ctx,
/* Long, but not too long to anger preemption disable checks */
usleep(50 * 1000); /* 50 ms, typical preempt reset is 150+ms */
- if ((flags & HANG) == 0) {
- /* Check for invalidly completing the task early */
+ /* Check for invalidly completing the task early */
+ if (flags & HANG) {
igt_assert(fence_busy(spin->out_fence));
- for (int n = 1; n <= i; n++)
- igt_assert_eq_u32(out[n], 0);
-
- igt_spin_end(spin);
+ igt_fail_on(igt_spin_has_started(invalid_spin));
}
+ igt_assert(fence_busy(out_fence));
+ for (int n = 1; n <= i; n++)
+ igt_assert_eq_u32(out[n], 0);
+
+ igt_spin_end(spin);
igt_waitchildren();
gem_set_domain(fd, scratch, I915_GEM_DOMAIN_GTT, 0);
- igt_assert(!fence_busy(spin->out_fence));
- if ((flags & HANG) == 0) {
+ igt_assert(!fence_busy(out_fence));
+ /*
+ * FIXME: find out when exactly we should expect out[i] == 0 vs out[i] == i
+ * if using GuC submission
+ */
+ if ((flags & HANG) == 0 || !gem_using_guc_submission(fd))
do
igt_assert_eq_u32(out[i], i);
while (--i);
- }
munmap(out, 4096);
+ if (flags & HANG)
+ igt_spin_free(fd, invalid_spin);
igt_spin_free(fd, spin);
gem_close(fd, scratch);
put_offset(ahnd, scratch);
diff --git a/tests/intel-ci/blacklist.txt b/tests/intel-ci/blacklist.txt
index 0d30773018..d9f0f52df5 100644
--- a/tests/intel-ci/blacklist.txt
+++ b/tests/intel-ci/blacklist.txt
@@ -25,7 +25,6 @@ igt at gem_evict_everything(@.*)?
igt at gem_exec_big@(?!.*single).*
igt at gem_exec_capture@many-(?!4K-).*
igt at gem_exec_fair@(?!.*basic).*
-igt at gem_exec_fence@.*hang.*
igt at gem_exec_flush@(?!.*basic).*
igt at gem_exec_latency(@.*)?
igt at gem_exec_lut_handle(@.*)?
diff --git a/tests/intel-ci/fast-feedback.testlist b/tests/intel-ci/fast-feedback.testlist
index bd5538a035..b207a81ae4 100644
--- a/tests/intel-ci/fast-feedback.testlist
+++ b/tests/intel-ci/fast-feedback.testlist
@@ -24,6 +24,8 @@ igt at gem_exec_fence@basic-busy
igt at gem_exec_fence@basic-wait
igt at gem_exec_fence@basic-await
igt at gem_exec_fence@nb-await
+igt at gem_exec_fence@await-hang
+igt at gem_exec_fence@nb-await-hang
igt at gem_exec_gttfill@basic
igt at gem_exec_parallel@engines
igt at gem_exec_store@basic
--
2.25.1
More information about the Intel-gfx-trybot
mailing list