2012-03-09 24 views
0

我正在學習linux-3.2.9內核,並在sched_rt.c函數pick_next_highest_task_rt()中有一個for循環,它查找所有rt_rq來查找(下一個)最高任務。但我這個「如果」條件疑惑:在pick_next_highest_task_rt函數中,如果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 (next && next->prio <= idx) 
    continue; 

?? ??

感謝, 邁克爾

回答

0

它看起來像一個小的bug;請轉到內核郵件列表。附上一個補丁,你可能會出名。 :)

+0

謝謝。我剛剛將補丁提交給LKML。讓我們看看會發生什麼...... – mwang25 2012-03-16 02:09:54

+0

更新:Yong Zhang和Peter Zijlsra非常好,並引導我完成了幾個修訂版本,並重新發布了一個已被接受的補丁。我想它會在3.3.x中出現。 – mwang25 2012-03-23 07:13:39

+0

另外,我瞭解到您應該遵循Documentation/SubmittingPatches中的說明。然後我建議您將整個補丁提交放在一個文本文件中,並在其上運行scripts/checkpatch.pl。 – mwang25 2012-03-23 07:17:46