[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