list_for_each_entry_safe_reverse(rq, rn,
                                         &engine->active.requests,
                                         sched.link) {
-               struct intel_engine_cs *owner;
 
                if (i915_request_completed(rq))
                        continue; /* XXX */
                 * engine so that it can be moved across onto another physical
                 * engine as load dictates.
                 */
-               owner = rq->hw_context->engine;
-               if (likely(owner == engine)) {
+               if (likely(rq->execution_mask == engine->mask)) {
                        GEM_BUG_ON(rq_prio(rq) == I915_PRIORITY_INVALID);
                        if (rq_prio(rq) != prio) {
                                prio = rq_prio(rq);
                        list_move(&rq->sched.link, pl);
                        active = rq;
                } else {
+                       struct intel_engine_cs *owner = rq->hw_context->engine;
+
                        /*
                         * Decouple the virtual breadcrumb before moving it
                         * back to the virtual engine -- we don't want the
 
        rq->gem_context = ce->gem_context;
        rq->engine = ce->engine;
        rq->ring = ce->ring;
+       rq->execution_mask = ce->engine->mask;
 
        rcu_assign_pointer(rq->timeline, tl);
        rq->hwsp_seqno = tl->hwsp_seqno;
        rq->batch = NULL;
        rq->capture_list = NULL;
        rq->flags = 0;
-       rq->execution_mask = ALL_ENGINES;
 
        INIT_LIST_HEAD(&rq->execute_cb);