Messages in this thread | | | Date | Mon, 20 Nov 2023 16:49:23 +0800 | Subject | Re: [PATCH] sched/eevdf: Avoid NULL in pick_eevdf | From | Abel Wu <> |
| |
Hi Xuewen, the pick part has been re-worked, would you please re-test with the newest branch?
Thanks, Abel
https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/?h=sched%2Fcore
On 11/20/23 3:38 PM, Xuewen Yan Wrote: > Now in pick_eevdf function, add the pick_first_entity to prevent > picking null when using eevdf, however, the leftmost may be null. > As a result, it would cause oops because the se is NULL. > > Fix this by compare the curr and left, if the left is null, set > the se be curr. > > Fixes: 147f3efaa241 ("sched/fair: Implement an EEVDF-like scheduling policy") > Signed-off-by: Xuewen Yan <xuewen.yan@unisoc.com> > --- > kernel/sched/fair.c | 18 +++++++++++++++++- > 1 file changed, 17 insertions(+), 1 deletion(-) > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index d7a3c63a2171..10916f6778ac 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -951,12 +951,28 @@ static struct sched_entity *__pick_eevdf(struct cfs_rq *cfs_rq) > return NULL; > } > > +/* Just simply choose the se with the smallest vruntime */ > +static struct sched_entity *__pick_cfs(struct cfs_rq *cfs_rq) > +{ > + struct sched_entity *curr = cfs_rq->curr; > + struct sched_entity *left = __pick_first_entity(cfs_rq); > + > + /* > + * If curr is set we have to see if its left of the leftmost entity > + * still in the tree, provided there was anything in the tree at all. > + */ > + if (!left || (curr && entity_before(curr, left))) > + left = curr; > + > + return left; > +} > + > static struct sched_entity *pick_eevdf(struct cfs_rq *cfs_rq) > { > struct sched_entity *se = __pick_eevdf(cfs_rq); > > if (!se) { > - struct sched_entity *left = __pick_first_entity(cfs_rq); > + struct sched_entity *left = __pick_cfs(cfs_rq); > if (left) { > pr_err("EEVDF scheduling fail, picking leftmost\n"); > return left;
| |