- 追加された行はこの色です。
- 削除された行はこの色です。
*参照元 [#s5b4454d]
#backlinks
*説明 [#v039ae21]
-パス: [[linux-4.4.1/mm/page_alloc.c]]
-FIXME: これは何?
--説明
**引数 [#k6177d80]
-struct compact_control *cc
--
--[[linux-4.4.1/compact_control]]
-unsigned long start
--
-unsigned long end
--
**返り値 [#md2b547e]
-int
--
**参考 [#qb1e03df]
*実装 [#ea95f08b]
/* [start, end) must belong to a single zone. */
static int __alloc_contig_migrate_range(struct compact_control *cc,
unsigned long start, unsigned long end)
{
/* This function is based on compact_zone() from compaction.c. */
unsigned long nr_reclaimed;
unsigned long pfn = start;
unsigned int tries = 0;
int ret = 0;
migrate_prep();
-
--[[linux-4.4.1/migrate_prep()]]
while (pfn < end || !list_empty(&cc->migratepages)) {
if (fatal_signal_pending(current)) {
ret = -EINTR;
break;
}
-
--[[linux-4.4.1/list_empty()]]
--[[linux-4.4.1/fatal_signal_pending()]]
if (list_empty(&cc->migratepages)) {
cc->nr_migratepages = 0;
pfn = isolate_migratepages_range(cc, pfn, end);
if (!pfn) {
ret = -EINTR;
break;
}
tries = 0;
} else if (++tries == 5) {
ret = ret < 0 ? ret : -EBUSY;
break;
}
-
--[[linux-4.4.1/isolate_migratepages_range()]]
nr_reclaimed = reclaim_clean_pages_from_list(cc->zone,
&cc->migratepages);
cc->nr_migratepages -= nr_reclaimed;
-
--[[linux-4.4.1/reclaim_clean_pages_from_list()]]
ret = migrate_pages(&cc->migratepages, alloc_migrate_target,
NULL, 0, cc->mode, MR_CMA);
-
--[[linux-4.4.1/migrate_pages()]]
}
if (ret < 0) {
putback_movable_pages(&cc->migratepages);
-
--[[linux-4.4.1/putback_movable_pages()]]
return ret;
}
return 0;
}
*コメント [#m9575f96]