Quoting Chris Wilson (2018-07-13 09:14:53) > From: Antonio Argenziano <antonio.argenziano@xxxxxxxxx> > > An hanging batch is nothing more than a spinning batch that never gets > stopped, so re-use the routines implemented in dummyload.c. > > v2: > - Let caller decide spin loop size > - Now builds with meson. > v3: > - Only use loose loops for hangs (Chris) > v4: > - No requires > > Signed-off-by: Antonio Argenziano <antonio.argenziano@xxxxxxxxx> > Cc: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Reviewed-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > --- > lib/igt_gt.c | 57 ++++++++-------------------------------------------- > 1 file changed, 8 insertions(+), 49 deletions(-) > > diff --git a/lib/igt_gt.c b/lib/igt_gt.c > index 89b318ae6..e2701fb21 100644 > --- a/lib/igt_gt.c > +++ b/lib/igt_gt.c > @@ -40,6 +40,7 @@ > #include "ioctl_wrappers.h" > #include "intel_reg.h" > #include "intel_chipset.h" > +#include "igt_dummyload.h" > > /** > * SECTION:igt_gt > @@ -271,14 +272,9 @@ igt_hang_t igt_hang_ctx(int fd, > unsigned flags, > uint64_t *offset) > { > - struct drm_i915_gem_relocation_entry reloc; > - struct drm_i915_gem_execbuffer2 execbuf; > - struct drm_i915_gem_exec_object2 exec; > struct drm_i915_gem_context_param param; > - uint32_t b[16]; > + igt_spin_t *spin; > unsigned ban; > - unsigned len; > - int gen; > > igt_require_hang_ring(fd, ring); > > @@ -302,52 +298,15 @@ igt_hang_t igt_hang_ctx(int fd, > if ((flags & HANG_ALLOW_BAN) == 0) > context_set_ban(fd, ctx, 0); > > - memset(&reloc, 0, sizeof(reloc)); > - memset(&exec, 0, sizeof(exec)); > - memset(&execbuf, 0, sizeof(execbuf)); > - > - exec.handle = gem_create(fd, 4096); > - exec.relocation_count = 1; > - exec.relocs_ptr = to_user_pointer(&reloc); > - > - memset(b, 0xc5, sizeof(b)); > - > - len = 0; > - gen = intel_gen(intel_get_drm_devid(fd)); > - if (gen >= 8) { > - b[len++] = MI_BATCH_BUFFER_START | 1 << 8 | 1; > - b[len++] = 0; > - b[len++] = 0; > - } else if (gen >= 6) { > - b[len++] = MI_BATCH_BUFFER_START | 1 << 8; > - b[len++] = 0; > - } else { > - b[len++] = MI_BATCH_BUFFER_START | 2 << 6; > - b[len] = 0; > - if (gen < 4) { > - b[len] |= 1; > - reloc.delta = 1; > - } > - len++; > - } > - b[len++] = MI_BATCH_BUFFER_END; > - b[len] = MI_NOOP; > - gem_write(fd, exec.handle, 0, b, sizeof(b)); > - > - reloc.offset = sizeof(uint32_t); > - reloc.target_handle = exec.handle; > - reloc.read_domains = I915_GEM_DOMAIN_COMMAND; > - > - execbuf.buffers_ptr = to_user_pointer(&exec); > - execbuf.buffer_count = 1; > - execbuf.flags = ring; > - i915_execbuffer2_set_context_id(execbuf, ctx); > - gem_execbuf(fd, &execbuf); > + spin = __igt_spin_batch_new(fd, > + .ctx = ctx, > + .engine = ring, > + .flags = IGT_SPIN_NO_PREEMPTION); > > if (offset) > - *offset = exec.offset; > + *offset = spin->obj[1].offset; > > - return (igt_hang_t){ exec.handle, ctx, ban, flags }; > + return (igt_hang_t){ spin->handle, ctx, ban, flags }; Oh, we shouldn't just leave it dangling. Drat. -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx