Quoting Chris Wilson (2018-05-13 10:50:09) > To no surprise (since we've flip-flopped over the use of PIN_HIGH a few > times), doing a search by address over a pathologically fragmented > address space is exceeding slow. To protect ourselves from nearly > unbounded latency (think searching a million holes while under > struct_mutex), limit the search for the highest available hole and > fallback to best-fit if it fails. > > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Cc: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx> Some testcase or measurement to quote before merging? Code itself is; Reviewed-by: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx> Regards, Joonas > --- > drivers/gpu/drm/i915/i915_gem_gtt.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c > index c01d6dbe269a..cc9eb5956c44 100644 > --- a/drivers/gpu/drm/i915/i915_gem_gtt.c > +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c > @@ -3967,7 +3967,7 @@ int i915_gem_gtt_insert(struct i915_address_space *vm, > > mode = DRM_MM_INSERT_BEST; > if (flags & PIN_HIGH) > - mode = DRM_MM_INSERT_HIGH; > + mode = DRM_MM_INSERT_HIGHEST; > if (flags & PIN_MAPPABLE) > mode = DRM_MM_INSERT_LOW; > > @@ -3987,6 +3987,15 @@ int i915_gem_gtt_insert(struct i915_address_space *vm, > if (err != -ENOSPC) > return err; > > + if (mode & DRM_MM_INSERT_END) { > + err = drm_mm_insert_node_in_range(&vm->mm, node, > + size, alignment, color, > + start, end, > + DRM_MM_INSERT_BEST); > + if (err != -ENOSPC) > + return err; > + } > + > if (flags & PIN_NOEVICT) > return -ENOSPC; > > -- > 2.17.0 > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel