Hi all, This patchset moves MIGRATE_ISOLATE to a standalone bit to avoid being overwritten during pageblock isolation process. Currently, MIGRATE_ISOLATE is part of enum migratetype (in include/linux/mmzone.h), thus, setting a pageblock to MIGRATE_ISOLATE overwrites its original migratetype. This causes pageblock migratetype loss during alloc_contig_range() and memory offline, especially when the process fails due to a failed pageblock isolation and the code tries to undo the finished pageblock isolations. It is on top of mm-everything-2025-02-13-23-42. In terms of performance for changing pageblock types, no performance change is observed: 1. I used perf to collect stats of offlining and onlining all memory of a 200GB VM 10 times and see that set_pfnblock_flags_mask() takes about 0.13% of the whole process with and without this patchset across 3 runs. 2. I used perf to collect stats of dd from /dev/zero to a 200GB tmpfs file and find get_pfnblock_flags_mask() takes about 0.30% of the process with and without this patchset across 3 runs. Design === Pageblock flags are read in words to achieve good performance and existing pageblock flags take 4 bits per pageblock. To avoid a substantial change to the pageblock flag code, pageblock flag bits are expanded to use 8 and MIGRATE_ISOLATE is moved to use the last bit (bit 7). It might look like the pageblock flags have doubled the overhead, but in reality, the overhead is only 1 byte per 2MB/4MB (based on pageblock config), or 0.0000476 %. Any comment and/or suggestion is welcome. Thanks. Zi Yan (4): mm/page_isolation: make page isolation a standalone bit. mm/page_isolation: remove migratetype from move_freepages_block_isolate() mm/page_isolation: remove migratetype from undo_isolate_page_range() mm/page_isolation: remove migratetype parameter from more functions. drivers/virtio/virtio_mem.c | 3 +- include/linux/gfp.h | 6 ++- include/linux/mmzone.h | 18 +++++-- include/linux/page-isolation.h | 24 ++++++--- include/linux/pageblock-flags.h | 33 +++++++++++- include/trace/events/kmem.h | 14 ++--- mm/cma.c | 2 +- mm/memory_hotplug.c | 5 +- mm/page_alloc.c | 96 ++++++++++++++++++++++++--------- mm/page_isolation.c | 66 +++++++++-------------- 10 files changed, 175 insertions(+), 92 deletions(-) -- 2.47.2