2012-03-09 9 views
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; 

??

おかげで、 マイケル

答えて

0

それは、小さなバグのように見えます。カーネルのメーリングリストに連れて行ってください。それにパッチを付けると、有名になることができます。 :)

+0

ありがとうございました。私はちょうどLKMLにパッチを提出しました。何が起こるか見てみよう... – mwang25

+0

更新:Yong ZhangとPeter Zijlsraはとても素敵で、パッチのいくつかの改訂と再送を案内してくれました。私はそれが3.3.xで出てくると思います。 – mwang25

+0

また、Documentation/SubmittingPatchesの指示に従ってください。それからあなたは、あなたのパッチ全体をテキストファイルに入れて、それにscripts/checkpatch.plを実行することをお勧めします。 – mwang25

関連する問題