linux-4.4.1/__zone_watermark_ok()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#ob95301c]
#backlinks
*説明 [#g7a15691]
-パス: [[linux-4.4.1/mm/page_alloc.c]]
-FIXME: これは何?
--説明
**引数 [#k9185d7d]
-struct zone *z
--
--[[linux-4.4.1/zone]]
-unsigned int order
--
-unsigned long mark
--
-int classzone_idx
--
-int alloc_flags
--
-long free_pages
--
**返り値 [#z73fc4e7]
-bool
--
**参考 [#c5f6dff3]
*実装 [#b57e160f]
/*
* Return true if free base pages are above 'mark'. For ...
* will return true of the order-0 watermark is reached ...
* one free page of a suitable size. Checking now avoids...
* to check in the allocation paths if no pages are free.
*/
static bool __zone_watermark_ok(struct zone *z, unsigned...
unsigned long mark, int classzone_idx, int alloc_flags,
long free_pages)
{
long min = mark;
int o;
const int alloc_harder = (alloc_flags & ALLOC_HARDER);
-
--[[linux-4.4.1/ALLOC_HARDER]]
/* free_pages may go negative - that's OK */
free_pages -= (1 << order) - 1;
if (alloc_flags & ALLOC_HIGH)
min -= min / 2;
-
--[[linux-4.4.1/ALLOC_HIGH]]
/*
* If the caller does not have rights to ALLOC_HARDER t...
* the high-atomic reserves. This will over-estimate th...
* atomic reserve but it avoids a search.
*/
if (likely(!alloc_harder))
free_pages -= z->nr_reserved_highatomic;
else
min -= min / 4;
-
--[[linux-4.4.1/likely()]]
#ifdef CONFIG_CMA
/* If allocation can't use CMA areas don't use free CMA...
if (!(alloc_flags & ALLOC_CMA))
free_pages -= zone_page_state(z, NR_FREE_CMA_PAGES);
#endif
-
--[[linux-4.4.1/CONFIG_CMA]]
--[[linux-4.4.1/ALLOC_CMA]]
--[[linux-4.4.1/zone_page_state()]]
/*
* Check watermarks for an order-0 allocation request. ...
* are not met, then a high-order request also cannot g...
* even if a suitable page happened to be free.
*/
if (free_pages <= min + z->lowmem_reserve[classzone_idx])
return false;
/* If this is an order-0 request then the watermark is ...
if (!order)
return true;
/* For a high-order request, check at least one suitabl...
for (o = order; o < MAX_ORDER; o++) {
struct free_area *area = &z->free_area[o];
int mt;
-
--[[linux-4.4.1/free_area]]
if (!area->nr_free)
continue;
if (alloc_harder)
return true;
for (mt = 0; mt < MIGRATE_PCPTYPES; mt++) {
if (!list_empty(&area->free_list[mt]))
return true;
}
-
--[[linux-4.4.1/MIGRATE_PCPTYPES]]
--[[linux-4.4.1/list_empty()]]
#ifdef CONFIG_CMA
if ((alloc_flags & ALLOC_CMA) &&
!list_empty(&area->free_list[MIGRATE_CMA])) {
return true;
}
#endif
-
--[[linux-4.4.1/MIGRATE_CMA]]
}
return false;
}
*コメント [#ac6bf389]
終了行:
*参照元 [#ob95301c]
#backlinks
*説明 [#g7a15691]
-パス: [[linux-4.4.1/mm/page_alloc.c]]
-FIXME: これは何?
--説明
**引数 [#k9185d7d]
-struct zone *z
--
--[[linux-4.4.1/zone]]
-unsigned int order
--
-unsigned long mark
--
-int classzone_idx
--
-int alloc_flags
--
-long free_pages
--
**返り値 [#z73fc4e7]
-bool
--
**参考 [#c5f6dff3]
*実装 [#b57e160f]
/*
* Return true if free base pages are above 'mark'. For ...
* will return true of the order-0 watermark is reached ...
* one free page of a suitable size. Checking now avoids...
* to check in the allocation paths if no pages are free.
*/
static bool __zone_watermark_ok(struct zone *z, unsigned...
unsigned long mark, int classzone_idx, int alloc_flags,
long free_pages)
{
long min = mark;
int o;
const int alloc_harder = (alloc_flags & ALLOC_HARDER);
-
--[[linux-4.4.1/ALLOC_HARDER]]
/* free_pages may go negative - that's OK */
free_pages -= (1 << order) - 1;
if (alloc_flags & ALLOC_HIGH)
min -= min / 2;
-
--[[linux-4.4.1/ALLOC_HIGH]]
/*
* If the caller does not have rights to ALLOC_HARDER t...
* the high-atomic reserves. This will over-estimate th...
* atomic reserve but it avoids a search.
*/
if (likely(!alloc_harder))
free_pages -= z->nr_reserved_highatomic;
else
min -= min / 4;
-
--[[linux-4.4.1/likely()]]
#ifdef CONFIG_CMA
/* If allocation can't use CMA areas don't use free CMA...
if (!(alloc_flags & ALLOC_CMA))
free_pages -= zone_page_state(z, NR_FREE_CMA_PAGES);
#endif
-
--[[linux-4.4.1/CONFIG_CMA]]
--[[linux-4.4.1/ALLOC_CMA]]
--[[linux-4.4.1/zone_page_state()]]
/*
* Check watermarks for an order-0 allocation request. ...
* are not met, then a high-order request also cannot g...
* even if a suitable page happened to be free.
*/
if (free_pages <= min + z->lowmem_reserve[classzone_idx])
return false;
/* If this is an order-0 request then the watermark is ...
if (!order)
return true;
/* For a high-order request, check at least one suitabl...
for (o = order; o < MAX_ORDER; o++) {
struct free_area *area = &z->free_area[o];
int mt;
-
--[[linux-4.4.1/free_area]]
if (!area->nr_free)
continue;
if (alloc_harder)
return true;
for (mt = 0; mt < MIGRATE_PCPTYPES; mt++) {
if (!list_empty(&area->free_list[mt]))
return true;
}
-
--[[linux-4.4.1/MIGRATE_PCPTYPES]]
--[[linux-4.4.1/list_empty()]]
#ifdef CONFIG_CMA
if ((alloc_flags & ALLOC_CMA) &&
!list_empty(&area->free_list[MIGRATE_CMA])) {
return true;
}
#endif
-
--[[linux-4.4.1/MIGRATE_CMA]]
}
return false;
}
*コメント [#ac6bf389]
ページ名: