*参照元 [#gbe690a9] #backlinks *説明 [#wcd2201a] -パス: --プロトタイプ宣言: [[linux-2.6.25/include/linux/blkdev.h]] ---CONFIG_BOUNCE 有効時: [[linux-2.6.25/mm/bounce.c]] ---CONFIG_BOUNCE 無効時: [[linux-2.6.25/include/linux/blkdev.h]] -FIXME: これは何? --説明 **引数 [#xa7efef2] -struct request_queue *q -- --[[linux-2.6.25/request_queue]] -struct bio **bio_orig -- --[[linux-2.6.25/bio]] **返り値 [#i6486688] -なし **参考 [#g45786ca] *実装 [#j659b4a3] ***プロトタイプ宣言 [#cedadef4] #ifdef CONFIG_BOUNCE (...略...) extern void blk_queue_bounce(struct request_queue *q, struct bio **bio); -CONFIG_BOUNCE が定義されている場合は、 別の場所で関数が実装される。下記参照。 #else (...略...) static inline void blk_queue_bounce(struct request_queue *q, struct bio **bio) { } -CONFIG_BOUNCE が定義されていない場合は何もしない。 #endif /* CONFIG_MMU */ ***CONFIG_BOUNCE が定義されている場合 [#u173669d] void blk_queue_bounce(struct request_queue *q, struct bio **bio_orig) { mempool_t *pool; - --[[linux-2.6.25/mempool_t]] /* * Data-less bio, nothing to bounce */ if (bio_empty_barrier(*bio_orig)) return; -サイズが 0 なら何もする必要はない。 -FIXME: なぜバリアフラグを見る必要がある?わからん。 --[[linux-2.6.25/bio_empty_barrier()]] /* * for non-isa bounce case, just check if the bounce pfn is equal * to or bigger than the highest pfn in the system -- in that case, * don't waste time iterating over bio segments */ if (!(q->bounce_gfp & GFP_DMA)) { if (q->bounce_pfn >= blk_max_pfn) return; pool = page_pool; - --[[linux-2.6.25/]] } else { BUG_ON(!isa_page_pool); pool = isa_page_pool; } - --isa_page_pool は init_emergency_isa_pool() で初期化される。 --[[linux-2.6.25/init_emergency_isa_pool()]] --[[linux-2.6.25/BUG_ON()]] /* * slow path */ __blk_queue_bounce(q, bio_orig, pool); - --[[linux-2.6.25/__blk_queue_bounce()]] } EXPORT_SYMBOL(blk_queue_bounce); -シンボルテーブルに関数をエクスポートする。 --[[linux-2.6.25/EXPORT_SYMBOL()]] ***CONFIG_BOUNCE が定義されていない場合 [#b14df869] -定義なし -プロトタイプ宣言の項を参照のこと。 *コメント [#f9ee8581]