[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] xen/sched: try harder to find a runnable unit in rt_schedule()
commit 0f1dec89d324d93fa056334ac384c6845f480fe8 Author: Juergen Gross <jgross@xxxxxxxx> AuthorDate: Fri Dec 2 10:29:19 2022 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Fri Dec 2 10:29:19 2022 +0100 xen/sched: try harder to find a runnable unit in rt_schedule() Instead of directly falling back to the idle unit in case the top unit from the run queue happened to be not runnable, consult the run queue again. Suggested-by: Dario Faggioli <dfaggioli@xxxxxxxx> Signed-off-by: Juergen Gross <jgross@xxxxxxxx> Reviewed-by: Dario Faggioli <dfaggioli@xxxxxxxx> --- xen/common/sched/rt.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/xen/common/sched/rt.c b/xen/common/sched/rt.c index 05988cbd3d..d443cd5831 100644 --- a/xen/common/sched/rt.c +++ b/xen/common/sched/rt.c @@ -1101,15 +1101,20 @@ rt_schedule(const struct scheduler *ops, struct sched_unit *currunit, } else { - snext = runq_pick(ops, cpumask_of(sched_cpu), cur_cpu); - - if ( snext == NULL ) - snext = rt_unit(sched_idle_unit(sched_cpu)); - else if ( !unit_runnable_state(snext->unit) ) + while ( true ) { + snext = runq_pick(ops, cpumask_of(sched_cpu), cur_cpu); + + if ( snext == NULL ) + { + snext = rt_unit(sched_idle_unit(sched_cpu)); + break; + } + if ( unit_runnable_state(snext->unit) ) + break; + q_remove(snext); replq_remove(ops, snext); - snext = rt_unit(sched_idle_unit(sched_cpu)); } /* if scurr has higher priority and budget, still pick scurr */ -- generated by git-patchbot for /home/xen/git/xen.git#master
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |