*参照元 [#q3fa1bf4] #backlinks *説明 [#x4dc177e] -パス: [[linux-4.4.1/include/linux/page-flags.h]] -ページが未使用状態かどうかを取得する。 --ページの _mapcount が PAGE_BUDDY_MAPCOUNT_VALUE かどうかで判定できる。 _mapcount が PAGE_BUDDY_MAPCOUNT_VALUE の値=未使用、という意味になるようだ。 ---PAGE_BUDDY_MAPCOUNT_VALUE は -128 --_mapcount はページが割り当てられたときに -1 に設定され、 以降ページがマップされた際にインクリメントされる。 --未使用/使用中の状態を表すためだけならば、 PAGE_BUDDY_MAPCOUNT_VALUE <= -2 ならどんな値でも良いことになるが、 アンダーフローを考慮すると -1 より十分小さい値であることが望ましい。 **引数 [#la18adf8] -struct page *page --ページ --[[linux-4.4.1/page]] **返り値 [#s363bb6a] -int --使用中なら 0、未使用状態なら 0 以外 **参考 [#ie11d5b6] -設定 --[[linux-4.4.1/__SetPageBuddy()]] -page_order とも関係が深い --[[linux-4.4.1/page_order()]] --[[linux-4.4.1/set_page_order()]] --[[linux-4.4.1/rmv_page_order()]] *実装 [#qa092d98] /* * PageBuddy() indicate that the page is free and in the buddy system * (see mm/page_alloc.c). * * PAGE_BUDDY_MAPCOUNT_VALUE must be <= -2 but better not too close to * -2 so that an underflow of the page_mapcount() won't be mistaken * for a genuine PAGE_BUDDY_MAPCOUNT_VALUE. -128 can be created very * efficiently by most CPU architectures. */ #define PAGE_BUDDY_MAPCOUNT_VALUE (-128) static inline int PageBuddy(struct page *page) { return atomic_read(&page->_mapcount) == PAGE_BUDDY_MAPCOUNT_VALUE; } -ページの _mapcount が PAGE_BUDDY_MAPCOUNT_VALUE かどうかを返す。 --[[linux-4.4.1/atomic_read()]] *コメント [#pab506b4]