[igt-dev] [PATCH i-g-t v3 18/52] tests/gem_exec_async: Adopt to use allocator

Zbigniew Kempczyński zbigniew.kempczynski at intel.com
Fri Aug 6 07:33:29 UTC 2021


On Thu, Aug 05, 2021 at 06:43:56PM -0700, Dixit, Ashutosh wrote:
> On Mon, 26 Jul 2021 12:59:52 -0700, Zbigniew Kempczyński wrote:
> >
> > For newer gens we're not able to rely on relocations. Adopt to use
> > offsets acquired from the allocator.
> 
> Reviewed-by: Ashutosh Dixit <ashutosh.dixit at intel.com>
> 
> But a couple of questions/comments below.
> 
> > +static void store_dword(int fd, int id, const intel_ctx_t *ctx,
> > +			 unsigned ring, uint32_t target, uint64_t target_offset,
> > +			 uint32_t offset, uint32_t value)
> >  {
> >	const unsigned int gen = intel_gen(intel_get_drm_devid(fd));
> >	struct drm_i915_gem_exec_object2 obj[2];
> > @@ -50,6 +53,15 @@ static void store_dword(int fd, const intel_ctx_t *ctx, unsigned ring,
> >	obj[0].flags = EXEC_OBJECT_ASYNC;
> >	obj[1].handle = gem_create(fd, 4096);
> >
> > +	if (id) {
> > +		obj[0].offset = target_offset;
> > +		obj[0].flags |= EXEC_OBJECT_PINNED | EXEC_OBJECT_WRITE |
> > +				EXEC_OBJECT_SUPPORTS_48B_ADDRESS;
> > +		obj[1].offset = (id + 1) * SZ_1M;
> 
> So this is where I think we are assigning new offsets to successive batches
> to avoid stalls, correct? Though I don't know why we don't get these
> offsets from the allocator (though I guess this will work since we have a
> 4K scratch buffer and whatever the spin needs)?

In store_dword() we got gem_close(fd, obj[1].handle) so we risk in
igt_fork() we got same offset for different batches. 

> 
> Maybe we can add a one line comment above, something like:

Ok, I'm going to add comment with the description why we need simple
and why we pass 'id' to store_word().

> 
> /* Assign new offsets to successive batches to prevent stalls */
> 
> > @@ -89,6 +101,8 @@ static void one(int fd, const intel_ctx_t *ctx,
> >	uint32_t scratch = gem_create(fd, 4096);
> >	igt_spin_t *spin;
> >	uint32_t *result;
> > +	uint64_t ahnd = get_simple_l2h_ahnd(fd, ctx->id);
> 
> Is there a particular reason for using simple rather than the reloc
> allocator here?

.dependency (scratch). We want to get same offset for same handle so
reloc allocator cannot be used here.

--
Zbigniew


More information about the igt-dev mailing list