*参照元 [#je6472a2]
#backlinks

*説明 [#i87cc72c]
-パス: [[linux-2.6.33/include/linux/page-flags.h]]

-PG_uptodate ビットのテスト
--指定されたページのフラグ(flags メンバ)に
PG_uptodate ビットが立っているかテストする。
--このフラグは他の CPU から更新されている場合があるため、
読み込みメモリバリアが必要。
PG_uptodate ビットをセットする。
--このフラグは他の CPU が読み出そうとしている場合があるため、
書き込みメモリバリアが必要。


**引数 [#m2468e41]
-struct page *page
--フラグを検査するページ構造体
--[[linux-2.6.33/page]]


**返り値 [#mb524d27]
-int(おそらく)
--型、意味は test_bit() に準じる。
--型はおそらく int。意味はビットがセットされていれば 0 以外、ビットがセットされていなければ 0 が返る、ことが多い。
-なし


**参考 [#p0c8b4f5]
-ページの属性フラグ(PG_xxxx)
--[[linux-2.6.33/pageflags]]
-この関数の片割れ(セット関数)
--[[linux-2.6.33/SetPageUptodate()]]
-この関数の片割れ(テスト関数)
--[[linux-2.6.33/PageUptodate()]]


*実装 [#ra9382e1]
 static inline void SetPageUptodate(struct page *page)
 {
 #ifdef CONFIG_S390
 	if (!test_and_set_bit(PG_uptodate, &page->flags))
 		page_clear_dirty(page);
-FIXME: IBM S/390 の場合は特別な処理が必要なようだが、
理由はわからない。
--[[linux-2.6.33/test_and_set_bit()]]
--[[linux-2.6.33/page_clear_dirty()]]

 #else
 	/*
 	 * Memory barrier must be issued before setting the PG_uptodate bit,
 	 * so that all previous stores issued in order to bring the page
 	 * uptodate are actually visible before PageUptodate becomes true.
 	 *
 	 * s390 doesn't need an explicit smp_wmb here because the test and
 	 * set bit already provides full barriers.
 	 */
 	smp_wmb();
-書き込みメモリバリア。
--[[linux-2.6.33/smp_wmb()]]

 	set_bit(PG_uptodate, &(page)->flags);
-ビット位置にビットをセットする。
--[[linux-2.6.33/set_bit()]]

 #endif
 }


*コメント [#xf59aa5c]

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