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

Chris Wilson chris at chris-wilson.co.uk
Sat Aug 31 01:52:03 CEST 2013


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

-- 
Chris Wilson, Intel Open Source Technology Centre



More information about the Intel-gfx mailing list