0
私はlinux-3.2.9カーネルを研究しています。sched_rt.c関数pick_next_highest_task_rt()にはforループがあり、すべてのrt_rqを見て(次の)最高のタスクを探します。しかし、私は、この「IF」条件によって困惑だ:の場合、next-> prio <= idxの場合は続行する必要がありますか?
for_each-leaf_rt-rq(rt_rq, rq)
....
if (next && next->prio < idx)
continue;
をここでは、次のものが既に発見された場合* task_structで、IDXは現在rt_rq上の優先順位が最も高い(低い数値)です。上記のコードでは、next-> prio == idxならば、if条件は失敗し、現在のrt_rqをスキャンします。しかし、これは時間の無駄だと思う。私たちが見つけ出す最も優先順位の高い仕事は優先順位がidxであるから、それは次の仕事が指す仕事と同じ優先順位だからだ。したがって、if条件は次のようにするべきではありません:
if (next && next->prio <= idx)
continue;
??
おかげで、 マイケル
ありがとうございました。私はちょうどLKMLにパッチを提出しました。何が起こるか見てみよう... – mwang25
更新:Yong ZhangとPeter Zijlsraはとても素敵で、パッチのいくつかの改訂と再送を案内してくれました。私はそれが3.3.xで出てくると思います。 – mwang25
また、Documentation/SubmittingPatchesの指示に従ってください。それからあなたは、あなたのパッチ全体をテキストファイルに入れて、それにscripts/checkpatch.plを実行することをお勧めします。 – mwang25