Messages in this thread | | | Subject | Re: [RFC PATCH v7 11/23] sched/fair: core wide cfs task priority comparison | From | Vineeth Pillai <> | Date | Thu, 17 Sep 2020 16:39:53 -0400 |
| |
> + > +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);
This should be: + vruntime_a -= calc_delta_fair(cfs_rq_a->core_lag, se_a); + vruntime_b -= calc_delta_fair(cfs_rq_b->core_lag, se_b);
Thanks, Vineeth
| |