+
+bool cfs_prio_less(struct task_struct *a, struct task_struct *b)
+{
+ struct sched_entity *se_a = &a->se, *se_b = &b->se;
+ struct cfs_rq *cfs_rq_a, *cfs_rq_b;
+ u64 vruntime_a, vruntime_b;
+
+#ifdef CONFIG_FAIR_GROUP_SCHED
+ while (!is_same_tg(se_a, se_b)) {
+ int se_a_depth = se_a->depth;
+ int se_b_depth = se_b->depth;
+
+ if (se_a_depth <= se_b_depth)
+ se_b = parent_entity(se_b);
+ if (se_a_depth >= se_b_depth)
+ se_a = parent_entity(se_a);
+ }
+#endif
+
+ cfs_rq_a = cfs_rq_of(se_a);
+ cfs_rq_b = cfs_rq_of(se_b);
+
+ vruntime_a = se_a->vruntime - cfs_rq_a->min_vruntime;
+ vruntime_b = se_b->vruntime - cfs_rq_b->min_vruntime;
+
+ trace_printk("(%s/%d;%Ld,%Lu) ?< (%s/%d;%Ld,%Lu)\n",
+ a->comm, a->pid, vruntime_a, cfs_rq_a->core_lag,
+ b->comm, b->pid, vruntime_b, cfs_rq_b->core_lag);
+ if (cfs_rq_a != cfs_rq_b) {
+ vruntime_a -= calc_delta_fair(cfs_rq_a->core_lag, &a->se);
+ vruntime_b -= calc_delta_fair(cfs_rq_b->core_lag, &b->se);