lockdep_assert_held(&rq->lock);
 
+       GEM_BUG_ON(!i915_request_is_active(rq));
        if (llist_empty(&rq->execute_cb))
                return;
 
        if (!test_and_set_bit(I915_FENCE_FLAG_ACTIVE, &request->fence.flags)) {
                list_move_tail(&request->sched.link, &engine->active.requests);
                clear_bit(I915_FENCE_FLAG_PQUEUE, &request->fence.flags);
+               __notify_execute_cb(request);
        }
+       GEM_BUG_ON(!llist_empty(&request->execute_cb));
 
        if (test_bit(DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT, &request->fence.flags) &&
            !test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &request->fence.flags) &&
            !i915_request_enable_breadcrumb(request))
                intel_engine_signal_breadcrumbs(engine);
 
-       __notify_execute_cb(request);
-
        spin_unlock(&request->lock);
 
        return result;