*参照元 [#we59b860]
#backlinks

*注意 [#g861fc5e]
-より新しいバージョンがあります。
--[[linux-2.6.33/blk_unplug_timeout()]]

*説明 [#e66c037e]
-パス: [[linux-2.6.25/block/blk-core.c]]

-unplug 用タイマーの期限が来ると呼び出される関数である。
--ブロックデバイス用のワークキューに、unplug 用の関数を
追加するだけ。


**引数 [#i2bf5ea8]
-unsigned long data
--タイマー作成時に渡したデータである。
このタイマーの場合は、struct request_queue へのポインタをキャストした値が
渡される。
--[[linux-2.6.25/request_queue]]

**返り値 [#beeca879]
-なし

**参考 [#g9a4fc28]
-タイマーに登録した関数はソフトウェア割り込みの
コンテキストで実行される。
--ユーザコンテキストは存在しない。
--スリープはできない。
--カレントプロセッサのソフトウェア割り込みは禁止されている。
--ハードウェア割り込みは許可されている。


*実装 [#v05c10b6]
 void blk_unplug_timeout(unsigned long data)
 {
         struct request_queue *q = (struct request_queue *)data;
 
         blk_add_trace_pdu_int(q, BLK_TA_UNPLUG_TIMER, NULL,
                                 q->rq.count[READ] + q->rq.count[WRITE]);
-
--[[linux-2.6.25/blk_add_trace_pdu_int()]]

         kblockd_schedule_work(&q->unplug_work);
-リクエストキューを unplug(栓を取り去る)する関数を
ワークキューにスケジュールする。
--通常の I/O スケジューラの場合は blk_unplug_work が呼び出される。
--CFQ(Completely Fair Queuing)を選択している場合、
cfq_kick_queue が呼び出される。
--[[linux-2.6.25/kblockd_schedule_work()]]
---[[linux-2.6.25/blk_unplug_work()]]
---[[linux-2.6.25/cfq_kick_queue()]]
---[[linux-memo/CFQ]]

 }


*コメント [#nbc64a09]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS