#author("2025-09-10T19:29:20+09:00","default:guest","guest") #author("2025-09-10T19:34:44+09:00","default:guest","guest") *参照元 [#dcca0554] #backlinks *説明 [#z4fc90ca] -パス: [[linux-5.15/mm/compaction.c]] -FIXME: これは何? --説明 **引数 [#u652ec3c] - -struct zone *zone -- --[[linux-5.15/zone]] **返り値 [#j28a5cf0] - -- -なし **参考 [#b33e81fd] *実装 [#weaffc7a] /* * This function is called to clear all cached information on pageblocks that * should be skipped for page isolation when the migrate and free page scanner * meet. */ static void __reset_isolation_suitable(struct zone *zone) { unsigned long migrate_pfn = zone->zone_start_pfn; unsigned long free_pfn = zone_end_pfn(zone) - 1; unsigned long reset_migrate = free_pfn; unsigned long reset_free = migrate_pfn; bool source_set = false; bool free_set = false; if (!zone->compact_blockskip_flush) return; zone->compact_blockskip_flush = false; - --[[linux-5.15/zone_end_pfn()]] /* * Walk the zone and update pageblock skip information. Source looks * for PageLRU while target looks for PageBuddy. When the scanner * is found, both PageBuddy and PageLRU are checked as the pageblock * is suitable as both source and target. */ for (; migrate_pfn < free_pfn; migrate_pfn += pageblock_nr_pages, free_pfn -= pageblock_nr_pages) { cond_resched(); - --[[linux-5.15/cond_resched()]] /* Update the migrate PFN */ if (__reset_isolation_pfn(zone, migrate_pfn, true, source_set) && migrate_pfn < reset_migrate) { source_set = true; reset_migrate = migrate_pfn; zone->compact_init_migrate_pfn = reset_migrate; zone->compact_cached_migrate_pfn[0] = reset_migrate; zone->compact_cached_migrate_pfn[1] = reset_migrate; } - --[[linux-5.15/__reset_isolation_pfn()]] /* Update the free PFN */ if (__reset_isolation_pfn(zone, free_pfn, free_set, true) && free_pfn > reset_free) { free_set = true; reset_free = free_pfn; zone->compact_init_free_pfn = reset_free; zone->compact_cached_free_pfn = reset_free; } - --[[linux-5.15/__reset_isolation_pfn()]] } /* Leave no distance if no suitable block was reset */ if (reset_migrate >= reset_free) { zone->compact_cached_migrate_pfn[0] = migrate_pfn; zone->compact_cached_migrate_pfn[1] = migrate_pfn; zone->compact_cached_free_pfn = free_pfn; } } *コメント [#yea6d019]