| From 3ea876f768feca917db94e6d194b7a7d42b0b902 Mon Sep 17 00:00:00 2001 |
| From: Ben Widawsky <benjamin.widawsky@intel.com> |
| Date: Wed, 11 Sep 2013 14:57:49 -0700 |
| Subject: drm/i915: Extract vm specific part of eviction |
| |
| As we'll see in the next patch, being able to evict for just 1 VM is |
| handy. |
| |
| Signed-off-by: Ben Widawsky <ben@bwidawsk.net> |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| (cherry picked from commit 7b7961220f1426aa795a3ded3404470b1c5749b6) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| 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 cc8974fbcf31..e9033f02f498 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)); |
| |
| return 0; |
| } |
| -- |
| 1.8.5.rc3 |
| |