On 10/08/18 04:01, Chris Wilson wrote:
Normally we wait on the last request, but that overlooks any
difficulties in waiting on a request while the next is being qeued.

/s/qeued/queued

Check those.

Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
---
  tests/gem_sync.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++
  1 file changed, 72 insertions(+)

diff --git a/tests/gem_sync.c b/tests/gem_sync.c
index c697220ad..fb209977d 100644
--- a/tests/gem_sync.c
+++ b/tests/gem_sync.c
@@ -294,6 +294,74 @@ wakeup_ring(int fd, unsigned ring, int timeout, int wlen)
        igt_assert_eq(intel_detect_and_clear_missed_interrupts(fd), 0);
  }

+       intel_detect_and_clear_missed_interrupts(fd);
+       igt_fork(child, num_engines) {
+               double start, end, elapsed;
+               unsigned long cycles;
+               igt_spin_t *spin[2];
+               uint32_t cmd;
+
+               spin[0] = __igt_spin_batch_new(fd,
+                                              .engine = ring,
+                                              .flags = IGT_SPIN_FAST);
+               cmd = *spin[0]->batch;
+
+               spin[1] = __igt_spin_batch_new(fd,
+                                              .engine = ring,
+                                              .flags = IGT_SPIN_FAST);
+               igt_assert(*spin[1]->batch == cmd);
+
+               start = gettime();
+               end = start + timeout;
+               cycles = 0;
+               do {
+                       for (int loop = 0; loop < 1024; loop++) {
+                               igt_spin_t *s = spin[loop & 1];
+
+                               igt_spin_batch_end(s);
+                               gem_sync(fd, s->handle);

How does the test fail if the sync goes wrong? Hang detector on the queued batch?

Antonio

+
+                               *s->batch = cmd;
+                               gem_execbuf(fd, &s->execbuf);
+                       }
+                       cycles += 1024;
+               } while ((elapsed = gettime()) < end);
+               igt_spin_batch_free(fd, spin[1]);
+               igt_spin_batch_free(fd, spin[0]);
+
+               igt_info("%s%sompleted %ld cycles: %.3f us\n",
+                        names[child % num_engines] ?: "",
+                        names[child % num_engines] ? " c" : "C",
+                        cycles, (elapsed - start)*1e6/cycles);
+       }
+       igt_waitchildren_timeout(2*timeout, NULL);
+       igt_assert_eq(intel_detect_and_clear_missed_interrupts(fd), 0);
+}
+

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to