[igt-dev] [PATCH i-g-t] tests/gem_*: Fix release offsets

Zbigniew Kempczyński zbigniew.kempczynski at intel.com
Mon Dec 19 11:40:39 UTC 2022


On Mon, Dec 19, 2022 at 12:26:54PM +0100, Kamil Konieczny wrote:
> 
> Hi Zbigniew,
> 
> On 2022-12-19 at 08:01:20 +0100, Zbigniew Kempczyński wrote:
> > After changing reloc allocator to track offsets allocations all
> > shortcommings started to be visible. Release offsets requires
> > handles, not offsets so fix this in the tests.
> 
> In gem_whisper you also corrected allocation, so imho you should
> write about it or put that in separate patch, see below.
> 
> > 
> > Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
> > Cc: Kamil Konieczny <kamil.konieczny at linux.intel.com>
> > ---
> >  tests/i915/gem_blits.c         | 12 ++++++------
> >  tests/i915/gem_ctx_isolation.c |  6 +++---
> >  tests/i915/gem_exec_whisper.c  |  7 ++++---
> >  3 files changed, 13 insertions(+), 12 deletions(-)
> > 
> > diff --git a/tests/i915/gem_blits.c b/tests/i915/gem_blits.c
> > index 24e83b9f51..d9296cf2d1 100644
> > --- a/tests/i915/gem_blits.c
> > +++ b/tests/i915/gem_blits.c
> > @@ -264,11 +264,11 @@ static void buffer_set_tiling(const struct device *device,
> >  	gem_execbuf(device->fd, &execbuf);
> >  
> >  	gem_close(device->fd, obj[2].handle);
> > -	put_offset(device->ahnd, obj[2].offset);
> > +	put_offset(device->ahnd, obj[2].handle);
> >  
> >  	gem_close(device->fd, obj[1].handle);
> > +	put_offset(device->ahnd, obj[1].handle);
> >  
> > -	put_offset(device->ahnd, buffer->gtt_offset);
> >  	buffer->gtt_offset = obj[0].offset;
> >  	buffer->handle = obj[0].handle;
> >  
> > @@ -403,11 +403,11 @@ static bool blit_to_linear(const struct device *device,
> >  
> >  	gem_execbuf(device->fd, &execbuf);
> >  	gem_close(device->fd, obj[2].handle);
> > -	put_offset(device->ahnd, obj[2].offset);
> > +	put_offset(device->ahnd, obj[2].handle);
> >  
> >  	gem_sync(device->fd, obj[0].handle);
> >  	gem_close(device->fd, obj[0].handle);
> > -	put_offset(device->ahnd, obj[0].offset);
> > +	put_offset(device->ahnd, obj[0].handle);
> >  
> >  	return true;
> >  }
> > @@ -531,7 +531,7 @@ static void buffer_free(const struct device *device, struct buffer *buffer)
> >  {
> >  	igt_assert(buffer_check(device, buffer, GTT));
> >  	gem_close(device->fd, buffer->handle);
> > -	put_offset(device->ahnd, buffer->gtt_offset);
> > +	put_offset(device->ahnd, buffer->handle);
> >  	free(buffer);
> >  }
> >  
> > @@ -744,7 +744,7 @@ blit(const struct device *device,
> >  
> >  	gem_execbuf(device->fd, &execbuf);
> >  	gem_close(device->fd, obj[2].handle);
> > -	put_offset(device->ahnd, obj[2].offset);
> > +	put_offset(device->ahnd, obj[2].handle);
> >  
> >  	dst->gtt_offset = obj[0].offset;
> >  	src->gtt_offset = obj[1].offset;
> > diff --git a/tests/i915/gem_ctx_isolation.c b/tests/i915/gem_ctx_isolation.c
> > index ec69357140..2def529ac3 100644
> > --- a/tests/i915/gem_ctx_isolation.c
> > +++ b/tests/i915/gem_ctx_isolation.c
> > @@ -437,7 +437,7 @@ static void write_regs(int fd, uint64_t ahnd,
> >  	}
> >  	gem_execbuf(fd, &execbuf);
> >  	gem_close(fd, obj.handle);
> > -	put_offset(ahnd, obj.offset);
> > +	put_offset(ahnd, obj.handle);
> >  }
> >  
> >  static void restore_regs(int fd,
> > @@ -524,8 +524,8 @@ static void restore_regs(int fd,
> >  	execbuf.rsvd1 = ctx->id;
> >  	gem_execbuf(fd, &execbuf);
> >  	gem_close(fd, obj[1].handle);
> > -	put_offset(ahnd, obj[0].offset);
> > -	put_offset(ahnd, obj[1].offset);
> > +	put_offset(ahnd, obj[0].handle);
> > +	put_offset(ahnd, obj[1].handle);
> >  }
> >  
> >  __attribute__((unused))
> > diff --git a/tests/i915/gem_exec_whisper.c b/tests/i915/gem_exec_whisper.c
> > index c3fc5ba804..616231aa96 100644
> > --- a/tests/i915/gem_exec_whisper.c
> > +++ b/tests/i915/gem_exec_whisper.c
> > @@ -106,10 +106,10 @@ static void init_hang(struct hang *h, int fd, const intel_ctx_cfg_t *cfg)
> >  	if (gem_has_contexts(fd)) {
> ---------------------------- ^
> Should this be h->fd ?
> 
> >  		h->ctx = intel_ctx_create(h->fd, cfg);
> >  		h->execbuf.rsvd1 = h->ctx->id;
> > -		h->ahnd = get_reloc_ahnd(fd, h->ctx->id);
> > +		h->ahnd = get_reloc_ahnd(h->fd, h->ctx->id);
> 
> This is allocation.
> 
> >  	} else {
> >  		h->ctx = NULL;
> > -		h->ahnd = get_reloc_ahnd(fd, 0);
> > +		h->ahnd = get_reloc_ahnd(h->fd, 0);
> 
> Same here, so maybe put this also in description ?
> Or make it separate patch ?

Ok, I change logic a bit here so it is worth to add separate
patch.

> 
> >  	}
> >  
> >  	memset(&h->execbuf, 0, sizeof(h->execbuf));
> > @@ -174,7 +174,8 @@ static void submit_hang(struct hang *h, unsigned *engines, int nengine, unsigned
> >  
> >  static void fini_hang(struct hang *h)
> >  {
> > -	put_offset(h->ahnd, h->bb_offset);
> > +	gem_close(h->fd, h->obj.handle);
> 
> Here you fix another bug, missed gem_close.

Generally it will be closed with h->fd closing (close(h->fd)) so this
only is adding explicit handling (for purity, not really necessary as
we're on reopened drm fd).

--
Zbigniew
> 
> Regards,
> Kamil
> 
> > +	put_offset(h->ahnd, h->obj.handle);
> >  	put_ahnd(h->ahnd);
> >  	intel_ctx_destroy(h->fd, h->ctx);
> >  	close(h->fd);
> > -- 
> > 2.34.1
> > 


More information about the igt-dev mailing list