diff mbox

[i-g-t] lib/dummyload: Control whether or not the batch is preemptible

Message ID 20180711074249.20479-1-chris@chris-wilson.co.uk (mailing list archive)
State New, archived
Headers show

Commit Message

Chris Wilson July 11, 2018, 7:42 a.m. UTC
Sometimes, we do not want to allow control to escape from the spinner,
e.g. for when we want to hang the GPU inside the batch.

(Split out from the preempt-timeout test case.)

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Antonio Argenziano <antonio.argenziano@intel.com>
---
 lib/igt_dummyload.c | 5 ++---
 lib/igt_dummyload.h | 7 ++++---
 2 files changed, 6 insertions(+), 6 deletions(-)
diff mbox

Patch

diff --git a/lib/igt_dummyload.c b/lib/igt_dummyload.c
index 7beb66244..2027a4b7f 100644
--- a/lib/igt_dummyload.c
+++ b/lib/igt_dummyload.c
@@ -186,7 +186,8 @@  emit_recursive_batch(igt_spin_t *spin,
 	spin->handle = obj[BATCH].handle;
 
 	/* Allow ourselves to be preempted */
-	*batch++ = MI_ARB_CHK;
+	if (!(opts->flags & IGT_SPIN_NO_PREEMPTION))
+		*batch++ = MI_ARB_CHK;
 
 	/* Pad with a few nops so that we do not completely hog the system.
 	 *
@@ -379,8 +380,6 @@  void igt_spin_batch_end(igt_spin_t *spin)
 	if (!spin)
 		return;
 
-	igt_assert(*spin->batch == MI_ARB_CHK ||
-		   *spin->batch == MI_BATCH_BUFFER_END);
 	*spin->batch = MI_BATCH_BUFFER_END;
 	__sync_synchronize();
 }
diff --git a/lib/igt_dummyload.h b/lib/igt_dummyload.h
index e80a12451..38bc7682e 100644
--- a/lib/igt_dummyload.h
+++ b/lib/igt_dummyload.h
@@ -50,9 +50,10 @@  struct igt_spin_factory {
 	unsigned int flags;
 };
 
-#define IGT_SPIN_FENCE_OUT (1 << 0)
-#define IGT_SPIN_POLL_RUN  (1 << 1)
-#define IGT_SPIN_FAST      (1 << 2)
+#define IGT_SPIN_FENCE_OUT     (1 << 0)
+#define IGT_SPIN_POLL_RUN      (1 << 1)
+#define IGT_SPIN_FAST          (1 << 2)
+#define IGT_SPIN_NO_PREEMPTION (1 << 3)
 
 igt_spin_t *
 __igt_spin_batch_factory(int fd, const struct igt_spin_factory *opts);