linux-4.4.1/__test_page_isolated_in_pageblock()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#qe075425]
#backlinks
*説明 [#s32fc6e7]
-パス: [[linux-4.4.1/mm/page_isolation.c]]
-指定した範囲にある全てのページが解放されている(isolated...
--全てのページは同じゾーンに属していなければならない。
ゾーンのロック(zone->lock)を確保してから呼び出すこと。
--PageBuddy() が真なら解放されているとみなしている。
**引数 [#qf6b4767]
-unsigned long pfn
--範囲の先頭のページフレーム番号
-unsigned long end_pfn
--範囲の末尾のページフレーム番号、ただし範囲にこのページ...
-bool skip_hwpoisoned_pages
--0 以外を指定すると PageHWPoison() が真を返してくるペー...
0 を指定すると HWPoison ページがあったらテスト失敗とみなす
**返り値 [#i7f3556c]
-int
--全てのページが解放されている(isolated)ならば 1、そう...
**参考 [#l7b7486f]
*実装 [#yee7b16c]
/*
* Test all pages in the range is free(means isolated) o...
* all pages in [start_pfn...end_pfn) must be in the sam...
* zone->lock must be held before call this.
*
* Returns 1 if all pages in the range are isolated.
*/
static int
__test_page_isolated_in_pageblock(unsigned long pfn, uns...
bool skip_hwpoisoned_pages)
{
struct page *page;
-
--[[linux-4.4.1/page]]
while (pfn < end_pfn) {
if (!pfn_valid_within(pfn)) {
pfn++;
continue;
}
-
--[[linux-4.4.1/pfn_valid_within()]]
page = pfn_to_page(pfn);
if (PageBuddy(page))
/*
* If the page is on a free list, it has to be on
* the correct MIGRATE_ISOLATE freelist. There is no
* simple way to verify that as VM_BUG_ON(), though.
*/
pfn += 1 << page_order(page);
else if (skip_hwpoisoned_pages && PageHWPoison(page))
/* A HWPoisoned page cannot be also PageBuddy */
pfn++;
else
break;
-PageBuddy() が真なら解放されているとみなしている。
--FIXME: page_order を使うのはなぜ?
-skip_hwpoisoned_pages が指定されていれば PageHWPoison() ...
--[[linux-4.4.1/pfn_to_page()]]
--[[linux-4.4.1/PageBuddy()]]
--[[linux-4.4.1/page_order()]]
--[[linux-4.4.1/PageHWPoison()]]
}
if (pfn < end_pfn)
return 0;
return 1;
}
*コメント [#n57f47c4]
終了行:
*参照元 [#qe075425]
#backlinks
*説明 [#s32fc6e7]
-パス: [[linux-4.4.1/mm/page_isolation.c]]
-指定した範囲にある全てのページが解放されている(isolated...
--全てのページは同じゾーンに属していなければならない。
ゾーンのロック(zone->lock)を確保してから呼び出すこと。
--PageBuddy() が真なら解放されているとみなしている。
**引数 [#qf6b4767]
-unsigned long pfn
--範囲の先頭のページフレーム番号
-unsigned long end_pfn
--範囲の末尾のページフレーム番号、ただし範囲にこのページ...
-bool skip_hwpoisoned_pages
--0 以外を指定すると PageHWPoison() が真を返してくるペー...
0 を指定すると HWPoison ページがあったらテスト失敗とみなす
**返り値 [#i7f3556c]
-int
--全てのページが解放されている(isolated)ならば 1、そう...
**参考 [#l7b7486f]
*実装 [#yee7b16c]
/*
* Test all pages in the range is free(means isolated) o...
* all pages in [start_pfn...end_pfn) must be in the sam...
* zone->lock must be held before call this.
*
* Returns 1 if all pages in the range are isolated.
*/
static int
__test_page_isolated_in_pageblock(unsigned long pfn, uns...
bool skip_hwpoisoned_pages)
{
struct page *page;
-
--[[linux-4.4.1/page]]
while (pfn < end_pfn) {
if (!pfn_valid_within(pfn)) {
pfn++;
continue;
}
-
--[[linux-4.4.1/pfn_valid_within()]]
page = pfn_to_page(pfn);
if (PageBuddy(page))
/*
* If the page is on a free list, it has to be on
* the correct MIGRATE_ISOLATE freelist. There is no
* simple way to verify that as VM_BUG_ON(), though.
*/
pfn += 1 << page_order(page);
else if (skip_hwpoisoned_pages && PageHWPoison(page))
/* A HWPoisoned page cannot be also PageBuddy */
pfn++;
else
break;
-PageBuddy() が真なら解放されているとみなしている。
--FIXME: page_order を使うのはなぜ?
-skip_hwpoisoned_pages が指定されていれば PageHWPoison() ...
--[[linux-4.4.1/pfn_to_page()]]
--[[linux-4.4.1/PageBuddy()]]
--[[linux-4.4.1/page_order()]]
--[[linux-4.4.1/PageHWPoison()]]
}
if (pfn < end_pfn)
return 0;
return 1;
}
*コメント [#n57f47c4]
ページ名: