*参照元 [#wee9b246]
#backlinks

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

-FIXME: これは何?
--ページのかたまり(scatterlist)の配列 2つを連結する。
-ページのかたまり(scatterlist)の配列 2つを連結する。


**引数 [#c4c977d6]
-struct scatterlist *prv
--連続したページのかたまり(scatterlist)の配列
--[[linux-4.4.1/scatterlist]]
-unsigned int prv_nents
--prv の長さ、つまり struct scatterlist の配列の要素数
--連結後の最後の要素だけは特別扱いされる。
---連結後の prv の最後の要素 prv[prv_nents - 1] はリストの連結用として使われるため、ページのかたまりを指さなくなる。
---連結後の prv[prv_nents - 1] の page_link はページ struct page * ではなく、次の scatterlist の先頭(struct scatterlist *)を保持しているので、sg_page() に渡してはいけない。
---[[linux-4.4.1/sg_page()]]
-struct scatterlist *sgl
--prv に連結する、scatterlist の配列


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


**参考 [#z3da937c]


*実装 [#pba24e5f]
 /**
  * sg_chain - Chain two sglists together
  * @prv:        First scatterlist
  * @prv_nents:  Number of entries in prv
  * @sgl:        Second scatterlist
  *
  * Description:
  *   Links @prv@ and @sgl@ together, to form a longer scatterlist.
  *
  **/
 static inline void sg_chain(struct scatterlist *prv, unsigned int prv_nents,
                             struct scatterlist *sgl)
 {
         /*
          * offset and length are unused for chain entry.  Clear them.
          */
         prv[prv_nents - 1].offset = 0;
         prv[prv_nents - 1].length = 0;
 
-連結後の最後の要素だけは特別扱いされる。
--prv の最後の要素 prv[prv_nents - 1] はリストの連結用として使われるため、ページのかたまりを指さない、このため offset, length は無効となる。

         /*
          * Set lowest bit to indicate a link pointer, and make sure to clear
          * the termination bit if it happens to be set.
          */
         prv[prv_nents - 1].page_link = ((unsigned long) sgl | 0x01) & ~0x02;
 }
-prv[prv_nents - 1] の page_link はページ struct page * ではなく、次の scatterlist の先頭(struct scatterlist *)を保持する。


*コメント [#f994bd1a]

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