Revert "sched/fair: Make update_min_vruntime() more readable"
authorPeter Zijlstra <peterz@infradead.org>
Wed, 7 Sep 2016 08:29:05 +0000 (10:29 +0200)
committerIngo Molnar <mingo@kernel.org>
Sat, 10 Sep 2016 09:17:40 +0000 (11:17 +0200)
There's a bug in this commit:

   97a7142f157a ("sched/fair: Make update_min_vruntime() more readable")

... when !rb_leftmost && curr we fail to advance min_vruntime.

So revert it.

Reported-by: Byungchul Park <byungchul.park@lge.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
kernel/sched/fair.c

index a6820b3..986c10c 100644 (file)
@@ -464,17 +464,20 @@ static void update_min_vruntime(struct cfs_rq *cfs_rq)
 {
        u64 vruntime = cfs_rq->min_vruntime;
 
+       if (cfs_rq->curr)
+               vruntime = cfs_rq->curr->vruntime;
+
        if (cfs_rq->rb_leftmost) {
                struct sched_entity *se = rb_entry(cfs_rq->rb_leftmost,
                                                   struct sched_entity,
                                                   run_node);
 
-               vruntime = se->vruntime;
+               if (!cfs_rq->curr)
+                       vruntime = se->vruntime;
+               else
+                       vruntime = min_vruntime(vruntime, se->vruntime);
        }
 
-       if (cfs_rq->curr)
-               vruntime = min_vruntime(vruntime, cfs_rq->curr->vruntime);
-
        /* ensure we never gain time by being placed backwards. */
        cfs_rq->min_vruntime = max_vruntime(cfs_rq->min_vruntime, vruntime);
 #ifndef CONFIG_64BIT