@@ -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();
}
@@ -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);