Commit 9843877d authored by Ben Widawsky's avatar Ben Widawsky Committed by Daniel Vetter

drm/i915: turn bound_ggtt checks to bound_any

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: default avatarBen 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: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent f6cd1f15
...@@ -141,7 +141,7 @@ int i915_mutex_lock_interruptible(struct drm_device *dev) ...@@ -141,7 +141,7 @@ int i915_mutex_lock_interruptible(struct drm_device *dev)
static inline bool static inline bool
i915_gem_object_is_inactive(struct drm_i915_gem_object *obj) 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 int
...@@ -422,7 +422,7 @@ i915_gem_shmem_pread(struct drm_device *dev, ...@@ -422,7 +422,7 @@ i915_gem_shmem_pread(struct drm_device *dev,
* anyway again before the next pread happens. */ * anyway again before the next pread happens. */
if (obj->cache_level == I915_CACHE_NONE) if (obj->cache_level == I915_CACHE_NONE)
needs_clflush = 1; 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); ret = i915_gem_object_set_to_gtt_domain(obj, false);
if (ret) if (ret)
return ret; return ret;
...@@ -739,7 +739,7 @@ i915_gem_shmem_pwrite(struct drm_device *dev, ...@@ -739,7 +739,7 @@ i915_gem_shmem_pwrite(struct drm_device *dev,
* right away and we therefore have to clflush anyway. */ * right away and we therefore have to clflush anyway. */
if (obj->cache_level == I915_CACHE_NONE) if (obj->cache_level == I915_CACHE_NONE)
needs_clflush_after = 1; 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); ret = i915_gem_object_set_to_gtt_domain(obj, true);
if (ret) if (ret)
return ret; return ret;
...@@ -1673,7 +1673,7 @@ i915_gem_object_put_pages(struct drm_i915_gem_object *obj) ...@@ -1673,7 +1673,7 @@ i915_gem_object_put_pages(struct drm_i915_gem_object *obj)
if (obj->pages_pin_count) if (obj->pages_pin_count)
return -EBUSY; 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 /* ->put_pages might need to allocate memory for the bit17 swizzle
* array, hence protect them from being reaped by removing them from gtt * 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) ...@@ -3311,7 +3311,7 @@ i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write)
int ret; int ret;
/* Not valid to be called on unbound objects. */ /* Not valid to be called on unbound objects. */
if (!i915_gem_obj_ggtt_bound(obj)) if (!i915_gem_obj_bound_any(obj))
return -EINVAL; return -EINVAL;
if (obj->base.write_domain == I915_GEM_DOMAIN_GTT) if (obj->base.write_domain == I915_GEM_DOMAIN_GTT)
...@@ -3735,7 +3735,7 @@ void ...@@ -3735,7 +3735,7 @@ void
i915_gem_object_unpin(struct drm_i915_gem_object *obj) i915_gem_object_unpin(struct drm_i915_gem_object *obj)
{ {
BUG_ON(obj->pin_count == 0); 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) if (--obj->pin_count == 0)
obj->pin_mappable = false; obj->pin_mappable = false;
......
...@@ -466,7 +466,7 @@ i915_gem_execbuffer_unreserve_object(struct drm_i915_gem_object *obj) ...@@ -466,7 +466,7 @@ i915_gem_execbuffer_unreserve_object(struct drm_i915_gem_object *obj)
{ {
struct drm_i915_gem_exec_object2 *entry; struct drm_i915_gem_exec_object2 *entry;
if (!i915_gem_obj_ggtt_bound(obj)) if (!i915_gem_obj_bound_any(obj))
return; return;
entry = obj->exec_entry; entry = obj->exec_entry;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment