set_next_entity(cfs_rq, se);
        }
 
-       if (hrtick_enabled(rq))
-               hrtick_start_fair(rq, p);
-
-       return p;
+       goto done;
 simple:
 #endif
 
 
        p = task_of(se);
 
+done: __maybe_unused
+#ifdef CONFIG_SMP
+       /*
+        * Move the next running task to the front of
+        * the list, so our cfs_tasks list becomes MRU
+        * one.
+        */
+       list_move(&p->se.group_node, &rq->cfs_tasks);
+#endif
+
        if (hrtick_enabled(rq))
                hrtick_start_fair(rq, p);
 
  */
 static struct task_struct *detach_one_task(struct lb_env *env)
 {
-       struct task_struct *p, *n;
+       struct task_struct *p;
 
        lockdep_assert_held(&env->src_rq->lock);
 
-       list_for_each_entry_safe(p, n, &env->src_rq->cfs_tasks, se.group_node) {
+       list_for_each_entry_reverse(p,
+                       &env->src_rq->cfs_tasks, se.group_node) {
                if (!can_migrate_task(p, env))
                        continue;
 
                if (env->idle != CPU_NOT_IDLE && env->src_rq->nr_running <= 1)
                        break;
 
-               p = list_first_entry(tasks, struct task_struct, se.group_node);
+               p = list_last_entry(tasks, struct task_struct, se.group_node);
 
                env->loop++;
                /* We've more or less seen every task there is, call it quits */
 
                continue;
 next:
-               list_move_tail(&p->se.group_node, tasks);
+               list_move(&p->se.group_node, tasks);
        }
 
        /*