diff options
author | Ben Widawsky <benjamin.widawsky@intel.com> | 2014-02-05 14:43:56 +0000 |
---|---|---|
committer | Ben Widawsky <benjamin.widawsky@intel.com> | 2014-02-08 13:14:52 -0800 |
commit | eee86eaf75eae8c8a443c498f6194ae069785874 (patch) | |
tree | 7950aed0af09037668597d43d796c6fd04f6fb28 | |
parent | 57dabd0cb0f32bffafb5a0676b078d6ddf98786f (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.c | 17 |
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: |