[Intel-gfx] [PATCH] drm/i915: Only free the oldest stale object before a fresh allocation

Chris Wilson chris at chris-wilson.co.uk
Thu Jul 6 11:44:47 UTC 2017


Quoting Tvrtko Ursulin (2017-07-06 12:40:56)
> 
> On 05/07/2017 18:21, Chris Wilson wrote:
> > Inspired by Tvrtko's critique of the reaping of the stale contexts
> > before allocating a new one, also limit the freed object reaping to the
> > oldest stale object before allocating a fresh object. Unlike contexts,
> > objects may have radically different sizes of backing storage, but
> > similar to contexts, whilst we want to prevent starvation due to
> > excessive freed lists, we also want do not want to delay fresh
> > allocations for too long. Only freeing the oldest on the freed object
> > list before each allocation is a reasonable compromise.
> > 
> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> > Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> > ---
> >   drivers/gpu/drm/i915/i915_gem.c | 8 ++++++--
> >   1 file changed, 6 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> > index 91145c39cd43..2048532c9cae 100644
> > --- a/drivers/gpu/drm/i915/i915_gem.c
> > +++ b/drivers/gpu/drm/i915/i915_gem.c
> > @@ -4473,9 +4473,13 @@ static void i915_gem_flush_free_objects(struct drm_i915_private *i915)
> >   {
> >       struct llist_node *freed;
> >   
> > -     freed = llist_del_all(&i915->mm.free_list);
> > -     if (unlikely(freed))
> > +     freed = NULL;
> > +     if (!llist_empty(&i915->mm.free_list))
> > +             freed = llist_del_first(&i915->mm.free_list);
> 
> Looks like llist_del_first already handles the empty list case by 
> returning NULL so you could simplify this.

I didn't want the extra call here (since object allocation is far more
frequent than context allocation), but that's just me.
-Chris


More information about the Intel-gfx mailing list