drm/i915: split PIN_GLOBAL out from PIN_MAPPABLE
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 14 Feb 2014 13:01:12 +0000 (14:01 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 14 Feb 2014 13:17:27 +0000 (14:17 +0100)
With abitrary pin flags it makes sense to split out a "please bind
this into global gtt" from the "please allocate in the mappable
range".

Use this unconditionally in our global gtt pin helper since this is
what its callers want. Later patches will drop PIN_MAPPABLE where it's
not strictly needed.

Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_gem.c
drivers/gpu/drm/i915/i915_gem_execbuffer.c

index 8a6db27dd96688486f0449f79657e9c9d13d05c9..8300c5b382037011b9a2a75e17622353e7c396af 100644 (file)
@@ -2078,6 +2078,7 @@ void i915_gem_vma_destroy(struct i915_vma *vma);
 
 #define PIN_MAPPABLE 0x1
 #define PIN_NONBLOCK 0x2
+#define PIN_GLOBAL 0x4
 int __must_check i915_gem_object_pin(struct drm_i915_gem_object *obj,
                                     struct i915_address_space *vm,
                                     uint32_t alignment,
@@ -2286,7 +2287,7 @@ i915_gem_obj_ggtt_pin(struct drm_i915_gem_object *obj,
                      uint32_t alignment,
                      unsigned flags)
 {
-       return i915_gem_object_pin(obj, obj_to_ggtt(obj), alignment, flags);
+       return i915_gem_object_pin(obj, obj_to_ggtt(obj), alignment, flags | PIN_GLOBAL);
 }
 
 /* i915_gem_context.c */
index aa263e371ebc8ffee0f8ea60a198c13597a29a42..b3a15c9fa034da9e6d7761a4b584cc45034259c4 100644 (file)
@@ -3838,7 +3838,7 @@ i915_gem_object_pin(struct drm_i915_gem_object *obj,
        struct i915_vma *vma;
        int ret;
 
-       if (WARN_ON(flags & PIN_MAPPABLE && !i915_is_ggtt(vm)))
+       if (WARN_ON(flags & (PIN_GLOBAL | PIN_MAPPABLE) && !i915_is_ggtt(vm)))
                return -EINVAL;
 
        vma = i915_gem_obj_to_vma(obj, vm);
@@ -3872,7 +3872,7 @@ i915_gem_object_pin(struct drm_i915_gem_object *obj,
        vma = i915_gem_obj_to_vma(obj, vm);
 
        vma->bind_vma(vma, obj->cache_level,
-                     flags & PIN_MAPPABLE ? GLOBAL_BIND : 0);
+                     flags & PIN_GLOBAL ? GLOBAL_BIND : 0);
 
        i915_gem_obj_to_vma(obj, vm)->pin_count++;
        if (flags & PIN_MAPPABLE)
index 013bd5ab3913e466fb796a0651dac7c1f677c125..b35849bbc36758204e28ede49d8971eb0459247c 100644 (file)
@@ -558,7 +558,7 @@ i915_gem_execbuffer_reserve_vma(struct i915_vma *vma,
                flags |= PIN_MAPPABLE;
 
        if (entry->flags & EXEC_OBJECT_NEEDS_GTT)
-               flags |= PIN_MAPPABLE;
+               flags |= PIN_GLOBAL;
 
        ret = i915_gem_object_pin(obj, vma->vm, entry->alignment, flags);
        if (ret)