[igt-dev] [PATCH i-g-t] lib/i915/intel_memory_region: Fix regression on 5.4 kernel

Zbigniew Kempczyński zbigniew.kempczynski at intel.com
Fri Sep 17 07:21:35 UTC 2021


On Thu, Sep 16, 2021 at 11:25:30AM -0400, Mark Yacoub wrote:
> On Thu, Sep 16, 2021 at 10:24 AM Vidya Srinivas
> <vidya.srinivas at intel.com> wrote:
> >
> > Starting commit 8759c4a3020ce4 "Add intel_buf_init_in_region"
> > __intel_buf_init uses gem_create_in_memory_regions instead of
> > gem_create. Older kernels like 5.4 still dont have support for
> > I915_GEM_CREATE_EXT_MEMORY_REGIONS (i915_gem_create_ext_ioctl)
> > from kernel commit (https://patchwork.freedesktop.org/patch/431581/?series=89648&rev=1)
> > Due to this, the flip-vs-fences tests are failing on kernel 5.4
> > Patch add roll back to gem_create when __gem_create_in_memory_region_list fails.
> >
> > Signed-off-by: Vidya Srinivas <vidya.srinivas at intel.com>
> > ---
> >  lib/i915/intel_memory_region.c | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/lib/i915/intel_memory_region.c b/lib/i915/intel_memory_region.c
> > index 3de40549319b..323b96bad232 100644
> > --- a/lib/i915/intel_memory_region.c
> > +++ b/lib/i915/intel_memory_region.c
> > @@ -209,7 +209,9 @@ uint32_t gem_create_in_memory_region_list(int fd, uint64_t size,
> >         uint32_t handle;
> >         int ret = __gem_create_in_memory_region_list(fd, &handle, size,
> >                                                      mem_regions, num_regions);
> > -       igt_assert_eq(ret, 0);
> > +       if (ret != 0)
> > +               handle = gem_create(fd, size);

> I'm not sure if this change should be here or should be at the caller
> `void __intel_buf_init(...).

I agree, silent fallback to system memory when mem_regions could contain
only device memory is definitely not we want.

You may leave this function intact and call underscored (not-asserting)
version of __gem_create_in_memory_regions() in __intel_buf_init(), then
react to result. I mean if region _is_ system memory fallback to gem_create()
is possible, otherwise assert.

--
Zbigniew

> > +
> Let's have a check before we return, parallel to the removed `
> igt_assert_eq(ret, 0);`, Something like `igt_assert(!ret || handle).`
> >         return handle;
> >  }
> >
> > --
> > 2.33.0
> >


More information about the igt-dev mailing list