[igt-dev] [PATCH i-g-t] lib/intel_batchbuffer: Use detected start offset in intel-bb instead 0x0

Zbigniew Kempczyński zbigniew.kempczynski at intel.com
Wed May 25 07:07:52 UTC 2022


On Tue, May 24, 2022 at 11:41:48PM -0700, Dixit, Ashutosh wrote:
> On Tue, 24 May 2022 04:18:36 -0700, Zbigniew Kempczyński wrote:
> >
> > On some platforms (like on ATS) 0x0 may not be available so allocator
> > should be instantiated with safe start offset to avoid getting -ENOSPC.
> > Change require also relaxation of automatic range selection in the
> > allocator.
> 
> The patch LGTM:
> 
> Reviewed-by: Ashutosh Dixit <ashutosh.dixit at intel.com>

Thanks for the review.

> 
> Do other callers of intel_allocator_open_full() also need to be modified to
> provide a safe start offset?

Unfortunately yes. I wondered about this - for alignment passing 0 was natural
to treat this as a hint to get detected value. For start there's not so easy,
0 is correct and user who instantiates allocator may want to start from this
offset (even if it may be not correct for some platform). We may use -1 casted
to uint64_t as a hint to get detected start offset but this will still require
changing all the tests which are using this. 

We may alter get_..._ahnd() helpers, assuming they will always select safe
start offset. Only where intel_allocator_open_full() is used directly we 
will need to be feeded manually.

--
Zbigniew

> 
> >
> > Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
> > Cc: Ashutosh Dixit <ashutosh.dixit at intel.com>
> > Cc: Dominik Grzegorzek <dominik.grzegorzek at intel.com>
> > ---
> >  lib/intel_allocator.c   | 2 +-
> >  lib/intel_batchbuffer.c | 3 +++
> >  2 files changed, 4 insertions(+), 1 deletion(-)
> >
> > diff --git a/lib/intel_allocator.c b/lib/intel_allocator.c
> > index 340b888286..7882e484b5 100644
> > --- a/lib/intel_allocator.c
> > +++ b/lib/intel_allocator.c
> > @@ -909,7 +909,7 @@ static uint64_t __intel_allocator_open_full(int fd, uint32_t ctx,
> >	struct alloc_resp resp;
> >	uint64_t gtt_size;
> >
> > -	if (!start && !end) {
> > +	if (!end) {
> >		igt_assert_f(can_report_gtt_size(fd), "Invalid fd\n");
> >		gtt_size = gem_aperture_size(fd);
> >		if (!gem_uses_full_ppgtt(fd))
> > diff --git a/lib/intel_batchbuffer.c b/lib/intel_batchbuffer.c
> > index 8680c9ba93..555618e463 100644
> > --- a/lib/intel_batchbuffer.c
> > +++ b/lib/intel_batchbuffer.c
> > @@ -1359,6 +1359,9 @@ __intel_bb_create(int i915, uint32_t ctx, uint32_t size, bool do_relocs,
> >	if (!ibb->uses_full_ppgtt)
> >		do_relocs = true;
> >
> > +	/* Use safe start offset instead assuming 0x0 is safe */
> > +	start = max_t(uint64_t, start, gem_detect_safe_start_offset(i915));
> > +
> >	/* if relocs are set we won't use an allocator */
> >	if (do_relocs)
> >		allocator_type = INTEL_ALLOCATOR_NONE;
> > --
> > 2.32.0
> >


More information about the igt-dev mailing list