[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