salemの日記: このページは マッチョなDDRマスター近衛隊の salem (16429)用です
日記 by
salem
for (i = 0; zones[i] != NULL; i++)のループは関数内で4箇所登場する。
1箇所のループでページの確保が出来なかった場合は、wakeup_kswapd()を呼び出す。
その後2箇所目のループが実行される。
if (gfp_mask & __GFP_HIGH)
local_min >>= 2;
2箇所目のループではrt_task()関数の呼び出し前に上の処理が実行される。
まだページが獲得出来ていない場合は以下の処理に入る
rebalance:
if ((p->flags & (PF_MEMALLOC | PF_MEMDIE))
&& !in_interrupt()) {
for (i = 0; zones[i] != NULL; i++) {
....
}
....
}
もし、if文内が実行された場合にページの取得が出来なかった場合は、
nopageタグで指定された箇所にジャンプし、終了処理が行われる。
if文が実行されなかった場合は
次のif文が実行される。
if (!wait)
goto nopage;
wait変数は以下のように設定されている。
int wait = gfp_mask & __GHP_WAIT
gfp_maskの値が__GFP_HIGHだった場合はここ__alloc_pages()の処理はここまで。
前にCDを焼く時にページ獲得失敗のワーニングログが出てたのはgfp_maskの値が__GFP_HIGHになっていて
if (!wail)のところで引っかかっていたからだった。
1箇所のループでページの確保が出来なかった場合は、wakeup_kswapd()を呼び出す。
その後2箇所目のループが実行される。
if (gfp_mask & __GFP_HIGH)
local_min >>= 2;
2箇所目のループではrt_task()関数の呼び出し前に上の処理が実行される。
まだページが獲得出来ていない場合は以下の処理に入る
rebalance:
if ((p->flags & (PF_MEMALLOC | PF_MEMDIE))
&& !in_interrupt()) {
for (i = 0; zones[i] != NULL; i++) {
....
}
....
}
もし、if文内が実行された場合にページの取得が出来なかった場合は、
nopageタグで指定された箇所にジャンプし、終了処理が行われる。
if文が実行されなかった場合は
次のif文が実行される。
if (!wait)
goto nopage;
wait変数は以下のように設定されている。
int wait = gfp_mask & __GHP_WAIT
gfp_maskの値が__GFP_HIGHだった場合はここ__alloc_pages()の処理はここまで。
前にCDを焼く時にページ獲得失敗のワーニングログが出てたのはgfp_maskの値が__GFP_HIGHになっていて
if (!wail)のところで引っかかっていたからだった。
このページは マッチョなDDRマスター近衛隊の salem (16429)用です More ログイン