By observing that we only use reloc-gtt on objects that are device
coherent and idle, we can avoid the set-to-domain call. Then noting that
our preferred partial GGTT mapping path automatically copes with tiling
(it does not use a fence) and handles all the error cases of pinning,
that dramatically simplifies that branch.

Signed-off-by: Chris Wilson <[email protected]>
---
 .../gpu/drm/i915/gem/i915_gem_execbuffer.c    | 21 +++++++------------
 1 file changed, 7 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c 
b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
index d70ca36f74f6..fe170186dd42 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
@@ -1151,23 +1151,16 @@ static void *reloc_iomap(struct drm_i915_gem_object 
*obj,
                struct i915_vma *vma;
                int err;
 
-               if (i915_gem_object_is_tiled(obj))
-                       return ERR_PTR(-EINVAL);
-
                if (use_cpu_reloc(cache, obj))
                        return NULL;
 
-               err = i915_gem_object_set_to_gtt_domain(obj, true);
-               if (err)
-                       return ERR_PTR(err);
-
-               vma = i915_gem_object_ggtt_pin_ww(obj, &eb->ww, NULL, 0, 0,
-                                                 PIN_MAPPABLE |
-                                                 PIN_NONBLOCK /* NOWARN */ |
-                                                 PIN_NOEVICT);
-               if (vma == ERR_PTR(-EDEADLK))
-                       return vma;
-
+               vma = ERR_PTR(-ENODEV);
+               if (!i915_gem_object_is_tiled(obj))
+                       vma = i915_gem_object_ggtt_pin_ww(obj, &eb->ww,
+                                                         NULL, 0, 0,
+                                                         PIN_MAPPABLE |
+                                                         PIN_NONBLOCK /* 
NOWARN */ |
+                                                         PIN_NOEVICT);
                if (IS_ERR(vma)) {
                        memset(&cache->node, 0, sizeof(cache->node));
                        mutex_lock(&ggtt->vm.mutex);
-- 
2.20.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to