drm/i915: call i915_request_await_object from _i915_vma_move_to_active
authorAndrzej Hajda <andrzej.hajda@intel.com>
Wed, 19 Oct 2022 21:59:05 +0000 (23:59 +0200)
committerMatthew Auld <matthew.auld@intel.com>
Wed, 16 Nov 2022 09:27:26 +0000 (09:27 +0000)
Since almost all calls to i915_vma_move_to_active are prepended with
i915_request_await_object, let's call the latter from
_i915_vma_move_to_active by default and add flag allowing bypassing it.
Adjust all callers accordingly.
The patch should not introduce functional changes.

Signed-off-by: Andrzej Hajda <andrzej.hajda@intel.com>
Acked-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20221019215906.295296-2-andrzej.hajda@intel.com
20 files changed:
drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
drivers/gpu/drm/i915/gem/selftests/i915_gem_client_blt.c
drivers/gpu/drm/i915/gem/selftests/i915_gem_coherency.c
drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
drivers/gpu/drm/i915/gem/selftests/igt_gem_utils.c
drivers/gpu/drm/i915/gt/intel_renderstate.c
drivers/gpu/drm/i915/gt/intel_workarounds.c
drivers/gpu/drm/i915/gt/selftest_execlists.c
drivers/gpu/drm/i915/gt/selftest_hangcheck.c
drivers/gpu/drm/i915/gt/selftest_lrc.c
drivers/gpu/drm/i915/gt/selftest_mocs.c
drivers/gpu/drm/i915/gt/selftest_rps.c
drivers/gpu/drm/i915/gt/selftest_workarounds.c
drivers/gpu/drm/i915/gvt/scheduler.c
drivers/gpu/drm/i915/i915_perf.c
drivers/gpu/drm/i915/i915_vma.c
drivers/gpu/drm/i915/i915_vma.h
drivers/gpu/drm/i915/selftests/i915_request.c
drivers/gpu/drm/i915/selftests/igt_spinner.c

index f65fd03f7cf2486ab7ca09ce86cb91ffa324130c..7d742f7e52b8cadcbe1633ff50d0623e0745cea7 100644 (file)
@@ -53,13 +53,13 @@ enum {
 #define DBG_FORCE_RELOC 0 /* choose one of the above! */
 };
 
-/* __EXEC_OBJECT_NO_RESERVE is BIT(31), defined in i915_vma.h */
-#define __EXEC_OBJECT_HAS_PIN          BIT(30)
-#define __EXEC_OBJECT_HAS_FENCE                BIT(29)
-#define __EXEC_OBJECT_USERPTR_INIT     BIT(28)
-#define __EXEC_OBJECT_NEEDS_MAP                BIT(27)
-#define __EXEC_OBJECT_NEEDS_BIAS       BIT(26)
-#define __EXEC_OBJECT_INTERNAL_FLAGS   (~0u << 26) /* all of the above + */
+/* __EXEC_OBJECT_ flags > BIT(29) defined in i915_vma.h */
+#define __EXEC_OBJECT_HAS_PIN          BIT(29)
+#define __EXEC_OBJECT_HAS_FENCE                BIT(28)
+#define __EXEC_OBJECT_USERPTR_INIT     BIT(27)
+#define __EXEC_OBJECT_NEEDS_MAP                BIT(26)
+#define __EXEC_OBJECT_NEEDS_BIAS       BIT(25)
+#define __EXEC_OBJECT_INTERNAL_FLAGS   (~0u << 25) /* all of the above + */
 #define __EXEC_OBJECT_RESERVED (__EXEC_OBJECT_HAS_PIN | __EXEC_OBJECT_HAS_FENCE)
 
 #define __EXEC_HAS_RELOC       BIT(31)
@@ -2101,7 +2101,8 @@ static int eb_move_to_gpu(struct i915_execbuffer *eb)
                                                       eb->composite_fence ?
                                                       eb->composite_fence :
                                                       &eb->requests[j]->fence,
-                                                      flags | __EXEC_OBJECT_NO_RESERVE);
+                                                      flags | __EXEC_OBJECT_NO_RESERVE |
+                                                      __EXEC_OBJECT_NO_REQUEST_AWAIT);
                }
        }
 
index 9a6a6b5b722b6015ea5b47c7ccc64ea6851047ef..97dd34bd3acfd377d3982cf32b8d6596e2f0b2a5 100644 (file)
@@ -464,9 +464,7 @@ static int move_to_active(struct i915_vma *vma,
        int err;
 
        i915_vma_lock(vma);
-       err = i915_request_await_object(rq, vma->obj, false);
-       if (err == 0)
-               err = i915_vma_move_to_active(vma, rq, flags);
+       err = i915_vma_move_to_active(vma, rq, flags);
        i915_vma_unlock(vma);
 
        return err;
index a666d7e610f5fe0cec06793096fe9bdb7753ea3f..c228fe4aba505a371769320da20581d9a5e1984c 100644 (file)
@@ -239,9 +239,7 @@ static int gpu_set(struct context *ctx, unsigned long offset, u32 v)
        }
        intel_ring_advance(rq, cs);
 
-       err = i915_request_await_object(rq, vma->obj, true);
-       if (err == 0)
-               err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
+       err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
 
 out_rq:
        i915_request_add(rq);
index d8864444432b778f23fb647d121a04d9dc629018..a0ff51d71d07aefe7ea8370fbc6af01b4fe8fd76 100644 (file)
@@ -984,15 +984,11 @@ retry:
                goto err_batch;
        }
 
-       err = i915_request_await_object(rq, batch->obj, false);
-       if (err == 0)
-               err = i915_vma_move_to_active(batch, rq, 0);
+       err = i915_vma_move_to_active(batch, rq, 0);
        if (err)
                goto skip_request;
 
-       err = i915_request_await_object(rq, vma->obj, true);
-       if (err == 0)
-               err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
+       err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
        if (err)
                goto skip_request;
 
@@ -1553,9 +1549,7 @@ static int write_to_scratch(struct i915_gem_context *ctx,
        }
 
        i915_vma_lock(vma);
-       err = i915_request_await_object(rq, vma->obj, false);
-       if (err == 0)
-               err = i915_vma_move_to_active(vma, rq, 0);
+       err = i915_vma_move_to_active(vma, rq, 0);
        i915_vma_unlock(vma);
        if (err)
                goto skip_request;
@@ -1689,9 +1683,7 @@ static int read_from_scratch(struct i915_gem_context *ctx,
        }
 
        i915_vma_lock(vma);
-       err = i915_request_await_object(rq, vma->obj, true);
-       if (err == 0)
-               err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
+       err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
        i915_vma_unlock(vma);
        if (err)
                goto skip_request;
index 1cae24349a96fd7b525c2b951aee79116075a74e..80e7fdd5d1642790425c051bb4e5680910047e97 100644 (file)
@@ -565,10 +565,8 @@ retry:
                        goto err_unpin;
                }
 
-               err = i915_request_await_object(rq, vma->obj, true);
-               if (err == 0)
-                       err = i915_vma_move_to_active(vma, rq,
-                                                     EXEC_OBJECT_WRITE);
+               err = i915_vma_move_to_active(vma, rq,
+                                             EXEC_OBJECT_WRITE);
 
                i915_request_add(rq);
 err_unpin:
@@ -1608,9 +1606,7 @@ retry:
                        goto out_unpin;
                }
 
-               err = i915_request_await_object(rq, vma->obj, false);
-               if (err == 0)
-                       err = i915_vma_move_to_active(vma, rq, 0);
+               err = i915_vma_move_to_active(vma, rq, 0);
 
                err = engine->emit_bb_start(rq, vma->node.start, 0, 0);
                i915_request_get(rq);
index 3c55e77b0f1b00c2fffeb3323938274bbd382f7c..374b10ac430e8fa49161d0c3007734e702b72efc 100644 (file)
@@ -131,17 +131,13 @@ int igt_gpu_fill_dw(struct intel_context *ce,
        }
 
        i915_vma_lock(batch);
-       err = i915_request_await_object(rq, batch->obj, false);
-       if (err == 0)
-               err = i915_vma_move_to_active(batch, rq, 0);
+       err = i915_vma_move_to_active(batch, rq, 0);
        i915_vma_unlock(batch);
        if (err)
                goto skip_request;
 
        i915_vma_lock(vma);
-       err = i915_request_await_object(rq, vma->obj, true);
-       if (err == 0)
-               err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
+       err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
        i915_vma_unlock(vma);
        if (err)
                goto skip_request;
index 5121e6dc2fa53eecae78ca176d1ca3aa5c0d63d8..9c1ae070ee7b9a847ea4dd798f3b26d89ec45e32 100644 (file)
@@ -215,9 +215,7 @@ int intel_renderstate_emit(struct intel_renderstate *so,
        if (!so->vma)
                return 0;
 
-       err = i915_request_await_object(rq, so->vma->obj, false);
-       if (err == 0)
-               err = i915_vma_move_to_active(so->vma, rq, 0);
+       err = i915_vma_move_to_active(so->vma, rq, 0);
        if (err)
                return err;
 
index 66eaacb9a68f36843cc1e05c02e089811b5fc9cd..c5f1edfeece2cf46214dc7ae83917a2e24914cfc 100644 (file)
@@ -3189,9 +3189,7 @@ retry:
                goto err_vma;
        }
 
-       err = i915_request_await_object(rq, vma->obj, true);
-       if (err == 0)
-               err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
+       err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
        if (err == 0)
                err = wa_list_srm(rq, wal, vma);
 
index 2c7c053a88081ff8ba9b561894b37fd721ccfcc8..ab2e9a6a24522ae9d1bc8e8bb651ab038b0bd297 100644 (file)
@@ -2764,9 +2764,7 @@ static int create_gang(struct intel_engine_cs *engine,
        i915_request_get(rq);
 
        i915_vma_lock(vma);
-       err = i915_request_await_object(rq, vma->obj, false);
-       if (!err)
-               err = i915_vma_move_to_active(vma, rq, 0);
+       err = i915_vma_move_to_active(vma, rq, 0);
        if (!err)
                err = rq->engine->emit_bb_start(rq,
                                                vma->node.start,
@@ -3180,14 +3178,10 @@ create_gpr_client(struct intel_engine_cs *engine,
        }
 
        i915_vma_lock(vma);
-       err = i915_request_await_object(rq, vma->obj, false);
-       if (!err)
-               err = i915_vma_move_to_active(vma, rq, 0);
+       err = i915_vma_move_to_active(vma, rq, 0);
        i915_vma_unlock(vma);
 
        i915_vma_lock(batch);
-       if (!err)
-               err = i915_request_await_object(rq, batch->obj, false);
        if (!err)
                err = i915_vma_move_to_active(batch, rq, 0);
        if (!err)
@@ -3521,9 +3515,7 @@ static int smoke_submit(struct preempt_smoke *smoke,
 
        if (vma) {
                i915_vma_lock(vma);
-               err = i915_request_await_object(rq, vma->obj, false);
-               if (!err)
-                       err = i915_vma_move_to_active(vma, rq, 0);
+               err = i915_vma_move_to_active(vma, rq, 0);
                if (!err)
                        err = rq->engine->emit_bb_start(rq,
                                                        vma->node.start,
index 71263058a7b0515cef0023ceec1e076d88dd357c..85984901708dd3a21fa5759fcdcb988e0248f38b 100644 (file)
@@ -106,10 +106,7 @@ static int move_to_active(struct i915_vma *vma,
        int err;
 
        i915_vma_lock(vma);
-       err = i915_request_await_object(rq, vma->obj,
-                                       flags & EXEC_OBJECT_WRITE);
-       if (err == 0)
-               err = i915_vma_move_to_active(vma, rq, flags);
+       err = i915_vma_move_to_active(vma, rq, flags);
        i915_vma_unlock(vma);
 
        return err;
@@ -1520,15 +1517,9 @@ static int __igt_reset_evict_vma(struct intel_gt *gt,
        }
 
        i915_vma_lock(arg.vma);
-       err = i915_request_await_object(rq, arg.vma->obj,
-                                       flags & EXEC_OBJECT_WRITE);
-       if (err == 0) {
-               err = i915_vma_move_to_active(arg.vma, rq, flags);
-               if (err)
-                       pr_err("[%s] Move to active failed: %d!\n", engine->name, err);
-       } else {
-               pr_err("[%s] Request await failed: %d!\n", engine->name, err);
-       }
+       err = i915_vma_move_to_active(arg.vma, rq, flags);
+       if (err)
+               pr_err("[%s] Move to active failed: %d!\n", engine->name, err);
 
        i915_vma_unlock(arg.vma);
 
index 82d3f8058995a9bdd4735f8f8c8229dfe679d13f..b25f281ce0cbfe1b69ee45a564f25ecc7e6f603b 100644 (file)
@@ -452,9 +452,7 @@ retry:
        *cs++ = i915_ggtt_offset(scratch) + RING_TAIL_IDX * sizeof(u32);
        *cs++ = 0;
 
-       err = i915_request_await_object(rq, scratch->obj, true);
-       if (!err)
-               err = i915_vma_move_to_active(scratch, rq, EXEC_OBJECT_WRITE);
+       err = i915_vma_move_to_active(scratch, rq, EXEC_OBJECT_WRITE);
 
        i915_request_get(rq);
        i915_request_add(rq);
@@ -602,9 +600,7 @@ __gpr_read(struct intel_context *ce, struct i915_vma *scratch, u32 *slot)
        }
 
        i915_vma_lock(scratch);
-       err = i915_request_await_object(rq, scratch->obj, true);
-       if (!err)
-               err = i915_vma_move_to_active(scratch, rq, EXEC_OBJECT_WRITE);
+       err = i915_vma_move_to_active(scratch, rq, EXEC_OBJECT_WRITE);
        i915_vma_unlock(scratch);
 
        i915_request_get(rq);
@@ -1060,9 +1056,7 @@ static int move_to_active(struct i915_request *rq,
        int err;
 
        i915_vma_lock(vma);
-       err = i915_request_await_object(rq, vma->obj, flags);
-       if (!err)
-               err = i915_vma_move_to_active(vma, rq, flags);
+       err = i915_vma_move_to_active(vma, rq, flags);
        i915_vma_unlock(vma);
 
        return err;
index c1d861333c44cc0821c4223f57fe06ba20750e7b..e0921c87d6a5c27a26fd49e9da5134c7a5cc8cfa 100644 (file)
@@ -228,9 +228,7 @@ static int check_mocs_engine(struct live_mocs *arg,
                return PTR_ERR(rq);
 
        i915_vma_lock(vma);
-       err = i915_request_await_object(rq, vma->obj, true);
-       if (!err)
-               err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
+       err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
        i915_vma_unlock(vma);
 
        /* Read the mocs tables back using SRM */
index 99a372486fb7f6e9de643f3949fca6f327fe3a32..39f1b7564170c4874a89c6e7d86f26b719387ca1 100644 (file)
@@ -652,9 +652,7 @@ int live_rps_frequency_cs(void *arg)
                        goto err_vma;
                }
 
-               err = i915_request_await_object(rq, vma->obj, false);
-               if (!err)
-                       err = i915_vma_move_to_active(vma, rq, 0);
+               err = i915_vma_move_to_active(vma, rq, 0);
                if (!err)
                        err = rq->engine->emit_bb_start(rq,
                                                        vma->node.start,
@@ -793,9 +791,7 @@ int live_rps_frequency_srm(void *arg)
                        goto err_vma;
                }
 
-               err = i915_request_await_object(rq, vma->obj, false);
-               if (!err)
-                       err = i915_vma_move_to_active(vma, rq, 0);
+               err = i915_vma_move_to_active(vma, rq, 0);
                if (!err)
                        err = rq->engine->emit_bb_start(rq,
                                                        vma->node.start,
index 711014bb53d981dca7fbf6f31aa4ecfe25a2b0cc..96e3861706d6f933a0a4675f27070d6c4719ec2f 100644 (file)
@@ -139,9 +139,7 @@ read_nonprivs(struct intel_context *ce)
        }
 
        i915_vma_lock(vma);
-       err = i915_request_await_object(rq, vma->obj, true);
-       if (err == 0)
-               err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
+       err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
        i915_vma_unlock(vma);
        if (err)
                goto err_req;
@@ -632,16 +630,12 @@ retry:
                                goto err_request;
                }
 
-               err = i915_request_await_object(rq, batch->obj, false);
-               if (err == 0)
-                       err = i915_vma_move_to_active(batch, rq, 0);
+               err = i915_vma_move_to_active(batch, rq, 0);
                if (err)
                        goto err_request;
 
-               err = i915_request_await_object(rq, scratch->obj, true);
-               if (err == 0)
-                       err = i915_vma_move_to_active(scratch, rq,
-                                                     EXEC_OBJECT_WRITE);
+               err = i915_vma_move_to_active(scratch, rq,
+                                             EXEC_OBJECT_WRITE);
                if (err)
                        goto err_request;
 
@@ -860,9 +854,7 @@ static int read_whitelisted_registers(struct intel_context *ce,
                return PTR_ERR(rq);
 
        i915_vma_lock(results);
-       err = i915_request_await_object(rq, results->obj, true);
-       if (err == 0)
-               err = i915_vma_move_to_active(results, rq, EXEC_OBJECT_WRITE);
+       err = i915_vma_move_to_active(results, rq, EXEC_OBJECT_WRITE);
        i915_vma_unlock(results);
        if (err)
                goto err_req;
@@ -944,9 +936,7 @@ static int scrub_whitelisted_registers(struct intel_context *ce)
        }
 
        i915_vma_lock(batch);
-       err = i915_request_await_object(rq, batch->obj, false);
-       if (err == 0)
-               err = i915_vma_move_to_active(batch, rq, 0);
+       err = i915_vma_move_to_active(batch, rq, 0);
        i915_vma_unlock(batch);
        if (err)
                goto err_request;
index d6fe94cd0fdb611b2d0bacc33787f31a18c65963..9cd8fcbf7cad16085d8405c9fc00b077db5cfbcf 100644 (file)
@@ -570,9 +570,8 @@ retry:
                        if (gmadr_bytes == 8)
                                bb->bb_start_cmd_va[2] = 0;
 
-                       ret = i915_vma_move_to_active(bb->vma,
-                                                     workload->req,
-                                                     0);
+                       ret = i915_vma_move_to_active(bb->vma, workload->req,
+                                                     __EXEC_OBJECT_NO_REQUEST_AWAIT);
                        if (ret)
                                goto err;
 
index 9e6f060592d87b7bd645904f31775f2265f9a84f..c2bee21a7df22f69d56182be7bc9d0fba7d96ce1 100644 (file)
@@ -2253,9 +2253,7 @@ retry:
                        goto err_add_request;
        }
 
-       err = i915_request_await_object(rq, vma->obj, 0);
-       if (!err)
-               err = i915_vma_move_to_active(vma, rq, 0);
+       err = i915_vma_move_to_active(vma, rq, 0);
        if (err)
                goto err_add_request;
 
index 947fde68e5f5387f1f1b747aba80022982af2dab..703fee6b5f75221ba91957892170c67d8e6189ca 100644 (file)
@@ -1844,6 +1844,11 @@ int _i915_vma_move_to_active(struct i915_vma *vma,
 
        GEM_BUG_ON(!vma->pages);
 
+       if (!(flags & __EXEC_OBJECT_NO_REQUEST_AWAIT)) {
+               err = i915_request_await_object(rq, vma->obj, flags & EXEC_OBJECT_WRITE);
+               if (unlikely(err))
+                       return err;
+       }
        err = __i915_vma_move_to_active(vma, rq);
        if (unlikely(err))
                return err;
index aecd9c64486b274b421a6ac08df5c8aeee389ecb..0757977a489bcc524ffe351c268c92d512a1fb3b 100644 (file)
@@ -55,6 +55,7 @@ static inline bool i915_vma_is_active(const struct i915_vma *vma)
 
 /* do not reserve memory to prevent deadlocks */
 #define __EXEC_OBJECT_NO_RESERVE BIT(31)
+#define __EXEC_OBJECT_NO_REQUEST_AWAIT BIT(30)
 
 int __must_check _i915_vma_move_to_active(struct i915_vma *vma,
                                          struct i915_request *rq,
index 4380473ceb9861a41429bd207a9b2667f1d18e34..0daa8669181dafbc269e6407f2784a000da8ec7c 100644 (file)
@@ -1223,9 +1223,7 @@ static int live_all_engines(void *arg)
                        goto out_request;
                }
 
-               err = i915_request_await_object(request[idx], batch->obj, 0);
-               if (err == 0)
-                       err = i915_vma_move_to_active(batch, request[idx], 0);
+               err = i915_vma_move_to_active(batch, request[idx], 0);
                GEM_BUG_ON(err);
 
                err = engine->emit_bb_start(request[idx],
@@ -1352,10 +1350,7 @@ static int live_sequential_engines(void *arg)
                        }
                }
 
-               err = i915_request_await_object(request[idx],
-                                               batch->obj, false);
-               if (err == 0)
-                       err = i915_vma_move_to_active(batch, request[idx], 0);
+               err = i915_vma_move_to_active(batch, request[idx], 0);
                GEM_BUG_ON(err);
 
                err = engine->emit_bb_start(request[idx],
index 0c22594ae274694b6e9226d9d8a246783728a176..78b3c138a6d326016f7a406f0a9496537f80e44d 100644 (file)
@@ -126,10 +126,7 @@ static int move_to_active(struct i915_vma *vma,
        int err;
 
        i915_vma_lock(vma);
-       err = i915_request_await_object(rq, vma->obj,
-                                       flags & EXEC_OBJECT_WRITE);
-       if (err == 0)
-               err = i915_vma_move_to_active(vma, rq, flags);
+       err = i915_vma_move_to_active(vma, rq, flags);
        i915_vma_unlock(vma);
 
        return err;