alloc_migrate_target() is called from migrate_pages(), so the page is always from user space, so why not add __GFP_HIGHMEM directly, instead of the following code.
if (PageHighMem(page)) // it always return false in x86_64 gfp_mask |= __GFP_HIGHMEM; Another question, when we do migration, why should split THP first? e.g. 2M(512*4kb) should flush 512 times TLB, and 2M(2M*1) only need one. I find flush TLB takes a lot of time, especially multithreaded app. Thanks, Xishi Qiu