summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/i915/i915_gem_execbuffer.c
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2013-08-14 14:14:04 +0200
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-09-04 17:34:41 +0200
commite656a6cba0febf12a9838882b891e1c5917c7a8b (patch)
treeca19a79bd5ff53a101d04e15d4cf9830f2686804 /drivers/gpu/drm/i915/i915_gem_execbuffer.c
parent27173f1f95db5e74ceb35fe9a2f2f348ea11bac9 (diff)
downloadlwn-e656a6cba0febf12a9838882b891e1c5917c7a8b.tar.gz
lwn-e656a6cba0febf12a9838882b891e1c5917c7a8b.zip
drm/i915: inline vma_create into lookup_or_create_vma
In the execbuf code we don't clean up any vmas which ended up not getting bound for code simplicity. To make sure that we don't end up creating multiple vma for the same vm kill the somewhat dangerous vma_create function and inline it into lookup_or_create. This is just a safety measure to prevent surprises in the future. Also update the somewhat confused comment in the execbuf code and clarify what kind of magic is going on with a new one. v2: Keep the function separate as requested by Chris. But give it a __ prefix for paranoia and move it tighter together with the other vma stuff. Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Ben Widawsky <ben@bwidawsk.net> Acked-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem_execbuffer.c')
-rw-r--r--drivers/gpu/drm/i915/i915_gem_execbuffer.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index 5dcfd4f59f87..93c8b28ff2e1 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -123,11 +123,16 @@ eb_lookup_vmas(struct eb_vmas *eb,
list_for_each_entry(obj, &objects, obj_exec_link) {
struct i915_vma *vma;
+ /*
+ * NOTE: We can leak any vmas created here when something fails
+ * later on. But that's no issue since vma_unbind can deal with
+ * vmas which are not actually bound. And since only
+ * lookup_or_create exists as an interface to get at the vma
+ * from the (obj, vm) we don't run the risk of creating
+ * duplicated vmas for the same vm.
+ */
vma = i915_gem_obj_lookup_or_create_vma(obj, vm);
if (IS_ERR(vma)) {
- /* XXX: We don't need an error path fro vma because if
- * the vma was created just for this execbuf, object
- * unreference should kill it off.*/
DRM_DEBUG("Failed to lookup VMA\n");
ret = PTR_ERR(vma);
goto out;