- 追加された行はこの色です。
- 削除された行はこの色です。
*参照元 [#x8596b7f]
#backlinks
*説明 [#kb2ef2cc]
-パス: [[linux-4.4.1/mm/page_alloc.c]]
-FIXME: これは何?
--説明
**引数 [#f49edaa7]
-struct zone *zone
--
--[[linux-4.4.1/zone]]
-struct page *page
--
--[[linux-4.4.1/page]]
-int low
--
-int high
--
-struct free_area *area
--
--[[linux-4.4.1/free_area]]
-int migratetype
--
**返り値 [#ndacdd79]
-void
**参考 [#mea210a4]
*実装 [#efaf0a49]
/*
* The order of subdivision here is critical for the IO subsystem.
* Please do not alter this order without good reasons and regression
* testing. Specifically, as large blocks of memory are subdivided,
* the order in which smaller blocks are delivered depends on the order
* they're subdivided in this function. This is the primary factor
* influencing the order in which pages are delivered to the IO
* subsystem according to empirical testing, and this is also justified
* by considering the behavior of a buddy system containing a single
* large block of memory acted on by a series of small allocations.
* This behavior is a critical factor in sglist merging's success.
*
* -- nyc
*/
static inline void expand(struct zone *zone, struct page *page,
int low, int high, struct free_area *area,
int migratetype)
{
unsigned long size = 1 << high;
while (high > low) {
area--;
high--;
size >>= 1;
VM_BUG_ON_PAGE(bad_range(zone, &page[size]), &page[size]);
-
--[[linux-4.4.1/VM_BUG_ON_PAGE()]]
--[[linux-4.4.1/bad_range()]]
if (IS_ENABLED(CONFIG_DEBUG_PAGEALLOC) &&
debug_guardpage_enabled() &&
high < debug_guardpage_minorder()) {
-
--[[linux-4.4.1/IS_ENABLED()]]
--[[linux-4.4.1/CONFIG_DEBUG_PAGEALLOC]]
--[[linux-4.4.1/debug_guardpage_enabled()]]
--[[linux-4.4.1/debug_guardpage_minorder()]]
/*
* Mark as guard pages (or page), that will allow to
* merge back to allocator when buddy will be freed.
* Corresponding page table entries will not be touched,
* pages will stay not present in virtual address space
*/
set_page_guard(zone, &page[size], high, migratetype);
continue;
-
--[[linux-4.4.1/set_page_guard()]]
}
list_add(&page[size].lru, &area->free_list[migratetype]);
area->nr_free++;
set_page_order(&page[size], high);
-
--[[linux-4.4.1/list_add()]]
--[[linux-4.4.1/set_page_order()]]
}
}
*コメント [#p1172d9c]