[Intel-gfx] [PATCH 34/66] drm/i915: Create VMAs (part 3.5) - map and fenceable tracking
Ben Widawsky
ben at bwidawsk.net
Fri Jun 28 01:30:35 CEST 2013
This commit is split out because it's a bit tricky (or at least it was
for me). It could very well be squashed in to the previous commits.
The map_and_fenceable tracking is per object. Map_and_fenceable however
only makes sense in the context of the global gtt. As such, VMAs created
for any other address space should ever modify these flags.
Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
---
drivers/gpu/drm/i915/i915_gem.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 8fe5f4e..83e2eb3 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2644,7 +2644,7 @@ i915_gem_object_unbind(struct drm_i915_gem_object *obj,
trace_i915_gem_object_unbind(obj, vm);
- if (obj->has_global_gtt_mapping)
+ if (obj->has_global_gtt_mapping && is_i915_ggtt(vm))
i915_gem_gtt_unbind_object(obj);
if (obj->has_aliasing_ppgtt_mapping) {
i915_ppgtt_unbind_object(dev_priv->gtt.aliasing_ppgtt, obj);
@@ -2655,7 +2655,8 @@ i915_gem_object_unbind(struct drm_i915_gem_object *obj,
list_del(&obj->mm_list);
/* Avoid an unnecessary call to unbind on rebind. */
- obj->map_and_fenceable = true;
+ if (is_i915_ggtt(vm))
+ obj->map_and_fenceable = true;
vma = i915_gem_obj_to_vma(obj, vm);
list_del(&vma->vma_link);
@@ -3223,7 +3224,9 @@ search_free:
is_i915_ggtt(vm) &&
vma->node.start + obj->base.size <= dev_priv->gtt.mappable_end;
- obj->map_and_fenceable = mappable && fenceable;
+ /* Map and fenceable only changes if the VM is the global GGTT */
+ if (is_i915_ggtt(vm))
+ obj->map_and_fenceable = mappable && fenceable;
trace_i915_gem_object_bind(obj, vm, map_and_fenceable);
i915_gem_verify_gtt(dev);
--
1.8.3.1
More information about the Intel-gfx
mailing list