#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]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS