Quoting Tvrtko Ursulin (2018-03-19 13:56:05) > @@ -146,7 +198,7 @@ static int emit_recursive_batch(igt_spin_t *spin, > > /* recurse */ > fill_reloc(&relocs[obj[BATCH].relocation_count], > - obj[BATCH].handle, (batch - spin->batch) + 1, > + obj[BATCH].handle, (batch - batch_start) + 1, D'oh. > I915_GEM_DOMAIN_COMMAND, 0); > if (gen >= 8) { > *batch++ = MI_BATCH_BUFFER_START | 1 << 8 | 1; > @@ -167,18 +219,23 @@ static int emit_recursive_batch(igt_spin_t *spin, > obj[BATCH].relocation_count++; > obj[BATCH].relocs_ptr = to_user_pointer(relocs); > > - execbuf.buffers_ptr = to_user_pointer(obj + (2 - execbuf.buffer_count)); > - execbuf.rsvd1 = ctx; > + execbuf->buffers_ptr = to_user_pointer(obj + > + (2 - execbuf->buffer_count)); > + execbuf->rsvd1 = ctx; > > - if (out_fence) > - execbuf.flags |= I915_EXEC_FENCE_OUT; > + if (flags & OUT_FENCE) > + execbuf->flags |= I915_EXEC_FENCE_OUT; > > for (i = 0; i < nengine; i++) { > - execbuf.flags &= ~ENGINE_MASK; > - execbuf.flags |= engines[i]; > - gem_execbuf_wr(fd, &execbuf); > - if (out_fence) { > - int _fd = execbuf.rsvd2 >> 32; > + execbuf->flags &= ~ENGINE_MASK; > + execbuf->flags |= engines[i]; > + > + if (flags & POLL_RUN) > + igt_require(gem_can_store_dword(fd, execbuf->flags)); Hmm, we need to lift this. If we abort on a secondary engine, we haven't yet attached ourselves into the igt_terminate_spin_batches and so we'll get GPU hangs. -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx