drm/i915: Assert vma->flags are updated correctly during binding
authorChris Wilson <chris@chris-wilson.co.uk>
Sun, 5 Nov 2017 12:45:50 +0000 (12:45 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Mon, 6 Nov 2017 09:30:36 +0000 (09:30 +0000)
As we bind, and unbind on error, we want to be sure that the vma->flags
are updated to reflect the binding state so that on the next invocation
all is well.

v2: Take two.
v3: Take three; vma-misplaced is checking map-and-fenceable so keep it
last!

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Matthew Auld <matthew.william.auld@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20171105124550.32715-1-chris@chris-wilson.co.uk
Reviewed-by: Matthew Auld <matthew.william.auld@gmail.com>
drivers/gpu/drm/i915/i915_vma.c

index fc77e8191eb55fc54ab31a28d7017f7e4aaeff9d..7cdf34800549c46b5f9c4255e08e9ac41b3b9b01 100644 (file)
@@ -633,15 +633,17 @@ int __i915_vma_do_pin(struct i915_vma *vma,
                if (ret)
                        goto err_unpin;
        }
+       GEM_BUG_ON(!drm_mm_node_allocated(&vma->node));
 
        ret = i915_vma_bind(vma, vma->obj->cache_level, flags);
        if (ret)
                goto err_remove;
 
+       GEM_BUG_ON((vma->flags & I915_VMA_BIND_MASK) == 0);
+
        if ((bound ^ vma->flags) & I915_VMA_GLOBAL_BIND)
                __i915_vma_set_map_and_fenceable(vma);
 
-       GEM_BUG_ON(!drm_mm_node_allocated(&vma->node));
        GEM_BUG_ON(i915_vma_misplaced(vma, size, alignment, flags));
        return 0;
 
@@ -649,6 +651,7 @@ err_remove:
        if ((bound & I915_VMA_BIND_MASK) == 0) {
                i915_vma_remove(vma);
                GEM_BUG_ON(vma->pages);
+               GEM_BUG_ON(vma->flags & I915_VMA_BIND_MASK);
        }
 err_unpin:
        __i915_vma_unpin(vma);