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@suse.com>
Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Dario Faggioli <dfaggioli@suse.com>
}
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 */