[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