[igt-dev] [PATCH i-g-t 2/7] lib/intel_batchbuffer: Detect and use kernel alignment capability

Zbigniew Kempczyński zbigniew.kempczynski at intel.com
Thu Oct 14 07:25:29 UTC 2021


On Wed, Oct 13, 2021 at 07:37:22PM -0700, Dixit, Ashutosh wrote:
> On Thu, 07 Oct 2021 23:54:27 -0700, Zbigniew Kempczyński wrote:
> >
> > diff --git a/lib/intel_batchbuffer.c b/lib/intel_batchbuffer.c
> > index 9c26fe207..ed7c25015 100644
> > --- a/lib/intel_batchbuffer.c
> > +++ b/lib/intel_batchbuffer.c
> > @@ -1335,6 +1335,7 @@ __intel_bb_create(int i915, uint32_t ctx, uint32_t size, bool do_relocs,
> >
> >	igt_assert(ibb);
> >
> > +	ibb->allows_passing_alignment = gem_allows_passing_alignment(i915);
> >	ibb->uses_full_ppgtt = gem_uses_full_ppgtt(i915);
> >	ibb->devid = intel_get_drm_devid(i915);
> >	ibb->gen = intel_gen(ibb->devid);
> > @@ -1783,6 +1784,7 @@ __add_to_cache(struct intel_bb *ibb, uint32_t handle)
> >	igt_assert(object);
> >
> >	object->handle = handle;
> > +	object->alignment = 0;
> >	found = tsearch((void *) object, &ibb->root, __compare_objects);
> >
> >	if (*found == object) {
> > @@ -1905,7 +1907,7 @@ intel_bb_add_object(struct intel_bb *ibb, uint32_t handle, uint64_t size,
> >		   || ALIGN(offset, alignment) == offset);
> >
> >	object = __add_to_cache(ibb, handle);
> > -	object->alignment = alignment ?: 4096;
> > +	alignment = alignment ?: 4096;
> 
> Can't we do:
> 	if (ibb->allows_passing_alignment)
> 		object->alignment = alignment ?: 4096;
> So we don't need further changes in this function? Or it breaks something?

I think it will work at this place, object->alignment is touched twice:
1. first on __add_to_cache() and set to 0
2. second on finalizing object settings after acquiring offset

I added this on the bottom where object->... are filling with established
values. I just wanted to have all those settings in one place, not
object->alignment on the top and all the rest on the bottom. But there's
cosmetic and personal preference.

--
Zbigniew

> 
> >	__add_to_objects(ibb, object);
> >
> >	/*
> > @@ -1917,7 +1919,7 @@ intel_bb_add_object(struct intel_bb *ibb, uint32_t handle, uint64_t size,
> >	if (INVALID_ADDR(object->offset)) {
> >		if (INVALID_ADDR(offset)) {
> >			offset = __intel_bb_get_offset(ibb, handle, size,
> > -						       object->alignment);
> > +						       alignment);
> >		} else {
> >			offset = offset & (ibb->gtt_size - 1);
> >
> > @@ -1962,6 +1964,9 @@ intel_bb_add_object(struct intel_bb *ibb, uint32_t handle, uint64_t size,
> >	if (ibb->uses_full_ppgtt && !ibb->enforce_relocs)
> >		object->flags |= EXEC_OBJECT_PINNED;
> >
> > +	if (ibb->allows_passing_alignment)
> > +		object->alignment = alignment;
> > +
> >	return object;
> >  }


More information about the igt-dev mailing list