goto skip_request;
 
        i915_vma_lock(batch);
-       GEM_BUG_ON(!reservation_object_test_signaled_rcu(batch->resv, true));
-       err = i915_vma_move_to_active(batch, rq, 0);
+       err = i915_request_await_object(rq, batch->obj, false);
+       if (err == 0)
+               err = i915_vma_move_to_active(batch, rq, 0);
        i915_vma_unlock(batch);
        if (err)
                goto skip_request;
 
        int err;
 
        i915_vma_lock(vma);
-       err = i915_vma_move_to_active(vma, rq, 0);
+       err = i915_request_await_object(rq, vma->obj, false);
+       if (err == 0)
+               err = i915_vma_move_to_active(vma, rq, 0);
        i915_vma_unlock(vma);
        if (unlikely(err))
                return err;
        }
 
        i915_vma_lock(vma);
-       err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
+       err = i915_request_await_object(rq, vma->obj, true);
+       if (err == 0)
+               err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
        i915_vma_unlock(vma);
        if (unlikely(err))
                goto out_request;
 
        intel_ring_advance(rq, cs);
 
        i915_vma_lock(vma);
-       err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
+       err = i915_request_await_object(rq, vma->obj, true);
+       if (err == 0)
+               err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
        i915_vma_unlock(vma);
        i915_vma_unpin(vma);
 
 
                goto err_request;
 
        i915_vma_lock(batch);
-       err = i915_vma_move_to_active(batch, rq, 0);
+       err = i915_request_await_object(rq, batch->obj, false);
+       if (err == 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_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
+       err = i915_request_await_object(rq, vma->obj, true);
+       if (err == 0)
+               err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
        i915_vma_unlock(vma);
        if (err)
                goto skip_request;
                goto err_request;
 
        i915_vma_lock(vma);
-       err = i915_vma_move_to_active(vma, rq, 0);
+       err = i915_request_await_object(rq, vma->obj, false);
+       if (err == 0)
+               err = i915_vma_move_to_active(vma, rq, 0);
        i915_vma_unlock(vma);
        if (err)
                goto skip_request;
                goto err_request;
 
        i915_vma_lock(vma);
-       err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
+       err = i915_request_await_object(rq, vma->obj, true);
+       if (err == 0)
+               err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
        i915_vma_unlock(vma);
        if (err)
                goto skip_request;
 
                }
 
                i915_vma_lock(vma);
-               err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
+               err = i915_request_await_object(rq, vma->obj, true);
+               if (err == 0)
+                       err = i915_vma_move_to_active(vma, rq,
+                                                     EXEC_OBJECT_WRITE);
                i915_vma_unlock(vma);
 
                i915_request_add(rq);
 
                goto err_request;
 
        i915_vma_lock(batch);
-       err = i915_vma_move_to_active(batch, rq, 0);
+       err = i915_request_await_object(rq, batch->obj, false);
+       if (err == 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_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
+       err = i915_request_await_object(rq, vma->obj, true);
+       if (err == 0)
+               err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
        i915_vma_unlock(vma);
        if (err)
                goto skip_request;
 
        }
 
        i915_vma_lock(so.vma);
-       err = i915_vma_move_to_active(so.vma, rq, 0);
+       err = i915_request_await_object(rq, so.vma->obj, false);
+       if (err == 0)
+               err = i915_vma_move_to_active(so.vma, rq, 0);
        i915_vma_unlock(so.vma);
 err_unpin:
        i915_vma_unpin(so.vma);
 
        int err;
 
        i915_vma_lock(vma);
-       err = i915_vma_move_to_active(vma, rq, flags);
+       err = i915_request_await_object(rq, vma->obj,
+                                       flags & EXEC_OBJECT_WRITE);
+       if (err == 0)
+               err = i915_vma_move_to_active(vma, rq, flags);
        i915_vma_unlock(vma);
 
        return err;
        }
 
        i915_vma_lock(arg.vma);
-       err = i915_vma_move_to_active(arg.vma, rq, flags);
+       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);
        i915_vma_unlock(arg.vma);
 
        if (flags & EXEC_OBJECT_NEEDS_FENCE)
 
 
        if (vma) {
                i915_vma_lock(vma);
-               err = rq->engine->emit_bb_start(rq,
-                                               vma->node.start,
-                                               PAGE_SIZE, 0);
+               err = i915_request_await_object(rq, vma->obj, false);
                if (!err)
                        err = i915_vma_move_to_active(vma, rq, 0);
+               if (!err)
+                       err = rq->engine->emit_bb_start(rq,
+                                                       vma->node.start,
+                                                       PAGE_SIZE, 0);
                i915_vma_unlock(vma);
        }
 
 
        }
 
        i915_vma_lock(vma);
-       err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
+       err = i915_request_await_object(rq, vma->obj, true);
+       if (err == 0)
+               err = i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
        i915_vma_unlock(vma);
        if (err)
                goto err_req;
 
                request[id]->batch = batch;
 
                i915_vma_lock(batch);
-               err = i915_vma_move_to_active(batch, request[id], 0);
+               err = i915_request_await_object(request[id], batch->obj, 0);
+               if (err == 0)
+                       err = i915_vma_move_to_active(batch, request[id], 0);
                i915_vma_unlock(batch);
                GEM_BUG_ON(err);