[igt-dev] [PATCH i-g-t] tests/i915/gem_exec_gttfill: Reenable test for discrete

Zbigniew Kempczyński zbigniew.kempczynski at intel.com
Sun Apr 3 09:13:37 UTC 2022


On Fri, Apr 01, 2022 at 02:08:35PM +0100, Chris Wilson wrote:
> Quoting Zbigniew Kempczyński (2022-04-01 12:38:50)
> > Test was turned off unnecessarily for discrete so add softpinning to
> > it and enable it again. Parallel execution on different engines and
> > same vm is thus limited to 4GiB (in userspace we don't have control
> > when same offset would be used for different handles on different
> > engines so we don't want to get -ENOSPC for such situation).
> > 
> > Fixes: https://gitlab.freedesktop.org/drm/intel/-/issues/4086
> > 
> > Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
> > Cc: Kamil Konieczny <kamil.konieczny at linux.intel.com>
> > ---
> >  tests/i915/gem_exec_gttfill.c | 40 +++++++++++++++++++++++++++++------
> >  1 file changed, 34 insertions(+), 6 deletions(-)
> > 
> > diff --git a/tests/i915/gem_exec_gttfill.c b/tests/i915/gem_exec_gttfill.c
> > index f16428714d..74974d324e 100644
> > --- a/tests/i915/gem_exec_gttfill.c
> > +++ b/tests/i915/gem_exec_gttfill.c
> > @@ -33,6 +33,7 @@ IGT_TEST_DESCRIPTION("Fill the GTT with batches.");
> >  struct batch {
> >         uint32_t handle;
> >         void *ptr;
> > +       uint64_t offset;
> >  };
> >  
> >  static void xchg_batch(void *array, unsigned int i, unsigned int j)
> > @@ -45,7 +46,7 @@ static void xchg_batch(void *array, unsigned int i, unsigned int j)
> >         batches[j] = tmp;
> >  }
> >  
> > -static void submit(int fd, int gen,
> > +static void submit(int fd, uint64_t ahnd, int gen,
> >                    struct drm_i915_gem_execbuffer2 *eb,
> >                    struct drm_i915_gem_relocation_entry *reloc,
> >                    struct batch *batches, unsigned int count)
> > @@ -56,7 +57,7 @@ static void submit(int fd, int gen,
> >  
> >         memset(&obj, 0, sizeof(obj));
> >         obj.relocs_ptr = to_user_pointer(reloc);
> > -       obj.relocation_count = 2;
> > +       obj.relocation_count = !ahnd ? 2 : 0;
> >  
> >         memset(reloc, 0, 2*sizeof(*reloc));
> >         reloc[0].offset = eb->batch_start_offset;
> > @@ -93,7 +94,17 @@ static void submit(int fd, int gen,
> >                 reloc[0].target_handle = obj.handle;
> >                 reloc[1].target_handle = obj.handle;
> >  
> > -               obj.offset = 0;
> > +               if (ahnd) {
> > +                       uint32_t *delta_ptr = batches[i].ptr + reloc[0].delta;
> > +
> > +                       *delta_ptr = batches[i].offset;
> > +                       batch[1] = batches[i].offset + reloc[0].delta;
> > +                       obj.flags = EXEC_OBJECT_PINNED;
> > +                       obj.offset = batches[i].offset;
> > +                       batch[3] = batches[i].offset;
> > +               } else {
> > +                       obj.offset = 0;
> 
> What is this code?
> 
> You are missing out on
> 
> commit ab0a539f0c723fd86a4d1440ec82004532b0ba22
> Author: Chris Wilson <chris.p.wilson at intel.com>
> Date:   Sat Jul 3 10:12:19 2021 +0000
> 
>     i915/gem_exec_gttfill: Apply relocations inline
> 
>     The goal of gem_exec_gttfill is to watch what happens when we
>     oversaturate the available GTT, and force the kernel to perform buffer
>     evictions from the virtual address space. We do this by submitting a
>     larger working set than we can possibly make resident, but we can still
>     provide locations hints to the kernel for placing the objects, as the
>     addresses will get reused and eviction occur. The eviction will remain
>     randomised on both a single engine, and across the engines, improving
>     our chance of spotting issues, but we will no long require as many
>     relocations.
> 
>     Signed-off-by: Chris Wilson <chris.p.wilson at intel.com>
>     Reviewed-by: Zbigniew Kempczynski <zbigniew.kempczynski at intel.com>

You're right, I've limited this unnecessarily. Cutting down by 
casting to uint32_t is wrong, because depending on allocator starting
offset I can go beyond 4GiB. 

--
Zbigniew



More information about the igt-dev mailing list