Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7b796122 authored by Ben Widawsky's avatar Ben Widawsky Committed by Daniel Vetter
Browse files

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: default avatarBen Widawsky <ben@bwidawsk.net>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 23f54483
Loading
Loading
Loading
Loading
+22 −6
Original line number Diff line number Diff line
@@ -155,12 +155,31 @@ i915_gem_evict_something(struct drm_device *dev, struct i915_address_space *vm,
	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;
}