[Intel-gfx] [PATCH 2/8] drm/i915: Extract vm specific part of eviction

Ben Widawsky ben at bwidawsk.net
Sat Aug 31 05:39:59 CEST 2013


On Sat, Aug 31, 2013 at 12:52:03AM +0100, Chris Wilson wrote:
> On Fri, Aug 30, 2013 at 04:43:55PM -0700, Ben Widawsky wrote:
> > As we'll see in the next patch, being able to evict for just 1 VM is
> > handy.
> > 
> > Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
> > ---
> >  drivers/gpu/drm/i915/i915_gem_evict.c | 28 ++++++++++++++++++++++------
> >  1 file changed, 22 insertions(+), 6 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/i915_gem_evict.c b/drivers/gpu/drm/i915/i915_gem_evict.c
> > index cc8974f..e9033f0 100644
> > --- a/drivers/gpu/drm/i915/i915_gem_evict.c
> > +++ b/drivers/gpu/drm/i915/i915_gem_evict.c
> > @@ -155,12 +155,31 @@ found:
> >  	return ret;
> >  }
> >  
> > +static int i915_gem_evict_vm(struct i915_address_space *vm, bool do_idle)
> > +{
> > +	struct i915_vma *vma, *next;
> > +	int ret;
> > +
> > +	if (do_idle) {
> > +		ret = i915_gpu_idle(vm->dev);
> > +		if (ret)
> > +			return ret;
> > +
> > +		i915_gem_retire_requests(vm->dev);
> > +	}
> > +
> > +	list_for_each_entry_safe(vma, next, &vm->inactive_list, mm_list)
> > +		if (vma->obj->pin_count == 0)
> > +			WARN_ON(i915_vma_unbind(vma));
> > +
> > +	return 0;
> > +}
> > +
> >  int
> >  i915_gem_evict_everything(struct drm_device *dev)
> >  {
> >  	drm_i915_private_t *dev_priv = dev->dev_private;
> >  	struct i915_address_space *vm;
> > -	struct i915_vma *vma, *next;
> >  	bool lists_empty = true;
> >  	int ret;
> >  
> > @@ -187,11 +206,8 @@ i915_gem_evict_everything(struct drm_device *dev)
> >  	i915_gem_retire_requests(dev);
> >  
> >  	/* Having flushed everything, unbind() should never raise an error */
> > -	list_for_each_entry(vm, &dev_priv->vm_list, global_link) {
> > -		list_for_each_entry_safe(vma, next, &vm->inactive_list, mm_list)
> > -			if (vma->obj->pin_count == 0)
> > -				WARN_ON(i915_vma_unbind(vma));
> > -	}
> > +	list_for_each_entry(vm, &dev_priv->vm_list, global_link)
> > +		WARN_ON(i915_gem_evict_vm(vm, false));
> 
> Wny not use do_idle here?
> -Chris
> 

The point of the extraction was to exactly avoid repeated call to idle +
retire, although in looking back at it, I  suppose the cost wouldn't be
much since the first idle would make subsequent calls to idle + retire
just about free).

Just dropping the do_idle parameter, and always idling is what you
probably want.

-- 
Ben Widawsky, Intel Open Source Technology Center



More information about the Intel-gfx mailing list