drm/i915: turn bound_ggtt checks to bound_any
authorBen Widawsky <ben@bwidawsk.net>
Thu, 1 Aug 2013 00:00:12 +0000 (17:00 -0700)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 8 Aug 2013 12:04:43 +0000 (14:04 +0200)
In some places, we want to know if an object is bound in any address
space, and not just the global GTT. This often applies when there is a
single global resource (object, pages, etc.)

function                             |      reason
--------------------------------------------------
i915_gem_object_is_inactive          | global object
i915_gem_object_put_pages            | object's pages
915_gem_object_unpin                 | global object
i915_gem_execbuffer_unreserve_object | temporary until we plumb vma
pread/pwrite                         | see the note below

Note: set_to_gtt_domain in pwrite/pread is abused as a wait_rendering
call - but that once only worked if the object is bound. We really
should replace this with a plain wait_rendering call, which would have
the upside that in pread it would be clearer that we actually only
wait for oustanding gpu writes.

Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
[danvet: Explain the set_to_gtt_domain in pwrite/pread and volunteer
Ben to replace those with wait_rendering calls.]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_gem.c
drivers/gpu/drm/i915/i915_gem_execbuffer.c

index 6c8c6b6b91ca48742bde49eaeb297e1556e2c204..a51731e9233bf99e618f5b62647f079e5fc9cf3b 100644 (file)
@@ -141,7 +141,7 @@ int i915_mutex_lock_interruptible(struct drm_device *dev)
 static inline bool
 i915_gem_object_is_inactive(struct drm_i915_gem_object *obj)
 {
-       return i915_gem_obj_ggtt_bound(obj) && !obj->active;
+       return i915_gem_obj_bound_any(obj) && !obj->active;
 }
 
 int
@@ -422,7 +422,7 @@ i915_gem_shmem_pread(struct drm_device *dev,
                 * anyway again before the next pread happens. */
                if (obj->cache_level == I915_CACHE_NONE)
                        needs_clflush = 1;
-               if (i915_gem_obj_ggtt_bound(obj)) {
+               if (i915_gem_obj_bound_any(obj)) {
                        ret = i915_gem_object_set_to_gtt_domain(obj, false);
                        if (ret)
                                return ret;
@@ -739,7 +739,7 @@ i915_gem_shmem_pwrite(struct drm_device *dev,
                 * right away and we therefore have to clflush anyway. */
                if (obj->cache_level == I915_CACHE_NONE)
                        needs_clflush_after = 1;
-               if (i915_gem_obj_ggtt_bound(obj)) {
+               if (i915_gem_obj_bound_any(obj)) {
                        ret = i915_gem_object_set_to_gtt_domain(obj, true);
                        if (ret)
                                return ret;
@@ -1673,7 +1673,7 @@ i915_gem_object_put_pages(struct drm_i915_gem_object *obj)
        if (obj->pages_pin_count)
                return -EBUSY;
 
-       BUG_ON(i915_gem_obj_ggtt_bound(obj));
+       BUG_ON(i915_gem_obj_bound_any(obj));
 
        /* ->put_pages might need to allocate memory for the bit17 swizzle
         * array, hence protect them from being reaped by removing them from gtt
@@ -3311,7 +3311,7 @@ i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write)
        int ret;
 
        /* Not valid to be called on unbound objects. */
-       if (!i915_gem_obj_ggtt_bound(obj))
+       if (!i915_gem_obj_bound_any(obj))
                return -EINVAL;
 
        if (obj->base.write_domain == I915_GEM_DOMAIN_GTT)
@@ -3735,7 +3735,7 @@ void
 i915_gem_object_unpin(struct drm_i915_gem_object *obj)
 {
        BUG_ON(obj->pin_count == 0);
-       BUG_ON(!i915_gem_obj_ggtt_bound(obj));
+       BUG_ON(!i915_gem_obj_bound_any(obj));
 
        if (--obj->pin_count == 0)
                obj->pin_mappable = false;
index 17be2e4bae6bf57efdeae60d547cce75f1e61fc8..aa3fa9425caecafdee63d39818c0c9d0f4b5b056 100644 (file)
@@ -466,7 +466,7 @@ i915_gem_execbuffer_unreserve_object(struct drm_i915_gem_object *obj)
 {
        struct drm_i915_gem_exec_object2 *entry;
 
-       if (!i915_gem_obj_ggtt_bound(obj))
+       if (!i915_gem_obj_bound_any(obj))
                return;
 
        entry = obj->exec_entry;