我正在研究linux-3.2.9内核,在sched_rt.c函数pick_next_highest_task_rt()中有一个for循环,它查看所有rt_rq以找到(下一个)最高任务。但我对这个“如果”条件感到困惑:
for_each-leaf_rt-rq(rt_rq, rq)
....
if (next && next->prio < idx)
continue;
这里,next是一个task_struct *,如果已找到一个,并且idx是当前rt_rq的最高优先级(较低的数值)。在上面的代码中,如果next-&gt; prio == idx,那么if条件将失败,我们将去扫描当前的rt_rq。但我认为这将浪费时间,因为我们发现的最高优先级任务将具有优先级idx,这与下一个指向的任务具有相同的优先级。因此if条件不应该是:
if (next && next->prio <= idx)
continue;
...
谢谢, 迈克尔
答案 0 :(得分:0)
它看起来像一个小虫子;请带到内核邮件列表。随附补丁,你可以成名。 :)