[igt-dev] [PATCH i-g-t 34/77] tests/i915/gem_shrink: Convert to intel_ctx_t
Jason Ekstrand
jason at jlekstrand.net
Tue Jun 15 20:29:24 UTC 2021
On Mon, Jun 14, 2021 at 2:23 PM Zbigniew Kempczyński
<zbigniew.kempczynski at intel.com> wrote:
>
> On Mon, Jun 14, 2021 at 11:36:49AM -0500, Jason Ekstrand wrote:
> > Only one subtest actually needs to iterate over engines.
> >
> > Signed-off-by: Jason Ekstrand <jason at jlekstrand.net>
> > ---
> > tests/i915/gem_shrink.c | 37 ++++++++++++++++++++-----------------
> > 1 file changed, 20 insertions(+), 17 deletions(-)
> >
> > diff --git a/tests/i915/gem_shrink.c b/tests/i915/gem_shrink.c
> > index b6450a6fb..be1125dd8 100644
> > --- a/tests/i915/gem_shrink.c
> > +++ b/tests/i915/gem_shrink.c
> > @@ -38,8 +38,6 @@
> > #define MADV_FREE 8
> > #endif
> >
> > -static unsigned int engines[I915_EXEC_RING_MASK + 1], nengine;
> > -
> > static void get_pages(int fd, uint64_t alloc)
> > {
> > uint32_t handle = gem_create(fd, alloc);
> > @@ -164,8 +162,10 @@ static void execbufN(int fd, uint64_t alloc)
> > static void execbufX(int fd, uint64_t alloc)
> > {
> > const uint32_t bbe = MI_BATCH_BUFFER_END;
> > + const struct intel_execution_engine2 *e;
> > struct drm_i915_gem_exec_object2 *obj;
> > struct drm_i915_gem_execbuffer2 execbuf;
> > + const intel_ctx_t *ctx;
> > int count = alloc >> 20;
> > uint64_t obj_size;
> >
> > @@ -175,23 +175,32 @@ static void execbufX(int fd, uint64_t alloc)
> > obj[count].handle = gem_create(fd, 4096);
> > gem_write(fd, obj[count].handle, 0, &bbe, sizeof(bbe));
> >
> > - for (int i = 1; i <= count; i++) {
> > - int j = count - i;
> > + ctx = intel_ctx_create_all_physical(fd);
> >
> > - obj[j+1].flags = 0;
> > + for (int i = 1; i <= count;) {
> > + for_each_ctx_engine(fd, ctx, e) {
> > + int j = count - i;
> >
> > - obj[j].handle = gem_create(fd, 1 << 20);
> > - obj[j].flags = EXEC_OBJECT_WRITE;
> > + obj[j+1].flags = 0;
> >
> > - execbuf.buffers_ptr = to_user_pointer(&obj[j]);
> > - execbuf.buffer_count = i + 1;
> > - execbuf.flags = engines[j % nengine];
> > - gem_execbuf(fd, &execbuf);
> > + obj[j].handle = gem_create(fd, 1 << 20);
> > + obj[j].flags = EXEC_OBJECT_WRITE;
> > +
> > + execbuf.buffers_ptr = to_user_pointer(&obj[j]);
> > + execbuf.buffer_count = i + 1;
> > + execbuf.flags = e->flags;
> > + execbuf.rsvd1 = ctx->id;
> > + gem_execbuf(fd, &execbuf);
> > +
> > + i++;
> > + }
> > }
>
> I don't like this loop, imo count - i may be negative when
> count % nengines != 0. You should break internal loop if i == count.
You're right. This is horrible. I just reworked it to be more like
the original and use intel_engine_list_for_ctx_cfg directly. It's way
better now.
--Jason
> --
> Zbigniew
>
>
> >
> > for (int i = 0; i <= count; i++)
> > gem_madvise(fd, obj[i].handle, I915_MADV_DONTNEED);
> > munmap(obj, obj_size);
> > +
> > + intel_ctx_destroy(fd, ctx);
> > }
> >
> > static void hang(int fd, uint64_t alloc)
> > @@ -429,7 +438,6 @@ igt_main
> > igt_fixture {
> > const int ncpus = sysconf(_SC_NPROCESSORS_ONLN);
> > uint64_t mem_size = intel_get_total_ram_mb();
> > - const struct intel_execution_engine2 *e;
> > int fd;
> >
> > fd = drm_open_driver(DRIVER_INTEL);
> > @@ -451,11 +459,6 @@ igt_main
> > intel_require_memory(num_processes, alloc_size,
> > CHECK_SWAP | CHECK_RAM);
> >
> > - nengine = 0;
> > - __for_each_physical_engine(fd, e)
> > - engines[nengine++] = e->flags;
> > - igt_require(nengine);
> > -
> > close(fd);
> > }
> >
> > --
> > 2.31.1
> >
> > _______________________________________________
> > igt-dev mailing list
> > igt-dev at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/igt-dev
More information about the igt-dev
mailing list