*/
 
        if ((last = *active)) {
-               if (need_preempt(engine, last, rb)) {
-                       if (i915_request_completed(last)) {
-                               tasklet_hi_schedule(&execlists->tasklet);
-                               return;
-                       }
-
+               if (i915_request_completed(last)) {
+                       goto check_secondary;
+               } else if (need_preempt(engine, last, rb)) {
                        ENGINE_TRACE(engine,
                                     "preempting last=%llx:%lld, prio=%d, hint=%d\n",
                                     last->fence.context,
                        last = NULL;
                } else if (need_timeslice(engine, last, rb) &&
                           timeslice_expired(execlists, last)) {
-                       if (i915_request_completed(last)) {
-                               tasklet_hi_schedule(&execlists->tasklet);
-                               return;
-                       }
-
                        ENGINE_TRACE(engine,
                                     "expired last=%llx:%lld, prio=%d, hint=%d, yield?=%s\n",
                                     last->fence.context,
                         * we hopefully coalesce several updates into a single
                         * submission.
                         */
+check_secondary:
                        if (!list_is_last(&last->sched.link,
                                          &engine->active.requests)) {
                                /*