浏览代码

sched: clean up min_vruntime use

clean up min_vruntime use.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Peter Zijlstra 17 年之前
父节点
当前提交
b0ffd246ea
共有 1 个文件被更改,包括 15 次插入11 次删除
  1. 15 11
      kernel/sched_fair.c

+ 15 - 11
kernel/sched_fair.c

@@ -124,6 +124,16 @@ max_vruntime(u64 min_vruntime, u64 vruntime)
 	return min_vruntime;
 	return min_vruntime;
 }
 }
 
 
+static inline u64
+min_vruntime(u64 min_vruntime, u64 vruntime)
+{
+	s64 delta = (s64)(vruntime - min_vruntime);
+	if (delta < 0)
+		min_vruntime = vruntime;
+
+	return min_vruntime;
+}
+
 static inline s64
 static inline s64
 entity_key(struct cfs_rq *cfs_rq, struct sched_entity *se)
 entity_key(struct cfs_rq *cfs_rq, struct sched_entity *se)
 {
 {
@@ -251,7 +261,7 @@ __update_curr(struct cfs_rq *cfs_rq, struct sched_entity *curr,
 	      unsigned long delta_exec)
 	      unsigned long delta_exec)
 {
 {
 	unsigned long delta_exec_weighted;
 	unsigned long delta_exec_weighted;
-	u64 next_vruntime, min_vruntime;
+	u64 vruntime;
 
 
 	schedstat_set(curr->exec_max, max((u64)delta_exec, curr->exec_max));
 	schedstat_set(curr->exec_max, max((u64)delta_exec, curr->exec_max));
 
 
@@ -269,19 +279,13 @@ __update_curr(struct cfs_rq *cfs_rq, struct sched_entity *curr,
 	 * value tracking the leftmost vruntime in the tree.
 	 * value tracking the leftmost vruntime in the tree.
 	 */
 	 */
 	if (first_fair(cfs_rq)) {
 	if (first_fair(cfs_rq)) {
-		next_vruntime = __pick_next_entity(cfs_rq)->vruntime;
-
-		/* min_vruntime() := !max_vruntime() */
-		min_vruntime = max_vruntime(curr->vruntime, next_vruntime);
-		if (min_vruntime == next_vruntime)
-			min_vruntime = curr->vruntime;
-		else
-			min_vruntime = next_vruntime;
+		vruntime = min_vruntime(curr->vruntime,
+				__pick_next_entity(cfs_rq)->vruntime);
 	} else
 	} else
-		min_vruntime = curr->vruntime;
+		vruntime = curr->vruntime;
 
 
 	cfs_rq->min_vruntime =
 	cfs_rq->min_vruntime =
-		max_vruntime(cfs_rq->min_vruntime, min_vruntime);
+		max_vruntime(cfs_rq->min_vruntime, vruntime);
 }
 }
 
 
 static void update_curr(struct cfs_rq *cfs_rq)
 static void update_curr(struct cfs_rq *cfs_rq)