summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Widawsky <benjamin.widawsky@intel.com>2014-02-05 14:43:56 +0000
committerBen Widawsky <benjamin.widawsky@intel.com>2014-02-08 13:14:52 -0800
commiteee86eaf75eae8c8a443c498f6194ae069785874 (patch)
tree7950aed0af09037668597d43d796c6fd04f6fb28
parent57dabd0cb0f32bffafb5a0676b078d6ddf98786f (diff)
drm/i915: Use a local variable for drm_mm_node
An upcoming patch will want to play some games with the node. This simply prepares us for that. Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 897747cdc04c..af861ed4841d 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -3221,6 +3221,7 @@ i915_gem_object_bind_to_vm(struct drm_i915_gem_object *obj,
u32 size, fence_size, fence_alignment, unfenced_alignment;
size_t gtt_max =
map_and_fenceable ? dev_priv->gtt.mappable_end : vm->total;
+ struct drm_mm_node *node;
struct i915_vma *vma;
int ret;
@@ -3268,8 +3269,11 @@ i915_gem_object_bind_to_vm(struct drm_i915_gem_object *obj,
goto err_unpin;
}
+ node = &vma->node;
+ if (WARN_ON(node->allocated))
+ goto skip_alloc;
search_free:
- ret = drm_mm_insert_node_in_range_generic(&vm->mm, &vma->node,
+ ret = drm_mm_insert_node_in_range_generic(&vm->mm, node,
size, alignment,
obj->cache_level, 0, gtt_max,
DRM_MM_SEARCH_DEFAULT);
@@ -3283,12 +3287,13 @@ search_free:
goto err_free_vma;
}
- if (WARN_ON(!i915_gem_valid_gtt_space(dev, &vma->node,
+ if (WARN_ON(!i915_gem_valid_gtt_space(dev, node,
obj->cache_level))) {
ret = -EINVAL;
goto err_remove_node;
}
+skip_alloc:
ret = i915_gem_vm_prepare_vma(vma);
if (ret)
goto err_remove_node;
@@ -3299,10 +3304,10 @@ search_free:
if (i915_is_ggtt(vm)) {
bool mappable, fenceable;
- fenceable = (vma->node.size == fence_size &&
- (vma->node.start & (fence_alignment - 1)) == 0);
+ fenceable = (node->size == fence_size &&
+ (node->start & (fence_alignment - 1)) == 0);
- mappable = (vma->node.start + obj->base.size <=
+ mappable = (node->start + obj->base.size <=
dev_priv->gtt.mappable_end);
obj->map_and_fenceable = mappable && fenceable;
@@ -3315,7 +3320,7 @@ search_free:
return 0;
err_remove_node:
- drm_mm_remove_node(&vma->node);
+ drm_mm_remove_node(node);
err_free_vma:
i915_gem_vma_destroy(vma);
err_unpin: