*参照元 [#w6d009de]
#backlinks

*説明 [#zd79ac10]
-パス: [[linux-4.4.1/include/linux/scatterlist.h]]

-連続したページのかたまりの先頭ページを取得する。
--ただし、scatterlist の連結に使っている場合は、この関数に渡してはならない。
--ただし、scatterlist の連結に使っている要素は、この関数に渡してはならない。


**引数 [#s645ad44]
-struct scatterlist *sg
--連続したページのかたまり
--[[linux-4.4.1/scatterlist]]


**返り値 [#xff15ca3]
-struct page *
--先頭ページ
--[[linux-4.4.1/page]]


**参考 [#radd51f8]


*実装 [#w407491e]
 static inline struct page *sg_page(struct scatterlist *sg)
 {
 #ifdef CONFIG_DEBUG_SG
-デバッグが有効
--[[linux-4.4.1/CONFIG_DEBUG_SG]]

         BUG_ON(sg->sg_magic != SG_MAGIC);
         BUG_ON(sg_is_chain(sg));
-連結用のエントリの場合、バグ扱いにする。
--連結用のエントリの場合 page_link には、ページ(struct page *)では無く、次の scatterlist のポインタ(struct scatterlist *)が入っているため。
--[[linux-4.4.1/BUG_ON()]]
--[[linux-4.4.1/sg_is_chain()]]

 #endif
         return (struct page *)((sg)->page_link & ~0x3);
 }
-page_link の下位 2ビットはフラグとして使っていて、ポインタとしては無効な値が入っているので、消す必要がある。


*コメント [#ea349e3f]

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