On 2024/8/27 19:47, Kefeng Wang wrote: > Use the isolate_folio_to_list() to unify hugetlb/LRU/non-LRU folio > isolation, which cleanup code a bit and save a few calls to > compound_head(). > > Signed-off-by: Kefeng Wang <wangkefeng.wang@xxxxxxxxxx> > --- > mm/memory_hotplug.c | 45 +++++++++++++++++---------------------------- > 1 file changed, 17 insertions(+), 28 deletions(-) > > diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c > index 1335fb6ef7fa..5f09866d17cf 100644 > --- a/mm/memory_hotplug.c > +++ b/mm/memory_hotplug.c > @@ -1772,15 +1772,15 @@ static int scan_movable_pages(unsigned long start, unsigned long end, > > static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn) > { > + struct folio *folio; > unsigned long pfn; > - struct page *page; > LIST_HEAD(source); > static DEFINE_RATELIMIT_STATE(migrate_rs, DEFAULT_RATELIMIT_INTERVAL, > DEFAULT_RATELIMIT_BURST); > > for (pfn = start_pfn; pfn < end_pfn; pfn++) { > - struct folio *folio; > - bool isolated; > + struct page *page; > + bool hugetlb; > > if (!pfn_valid(pfn)) > continue; > @@ -1811,34 +1811,22 @@ static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn) > continue; > } > > - if (folio_test_hugetlb(folio)) { > - isolate_hugetlb(folio, &source); > - continue; > + hugetlb = folio_test_hugetlb(folio); > + if (!hugetlb) { > + folio = folio_get_nontail_page(page); > + if (!folio) > + continue; > } > > - if (!get_page_unless_zero(page)) > - continue; > - /* > - * We can skip free pages. And we can deal with pages on > - * LRU and non-lru movable pages. > - */ > - if (PageLRU(page)) > - isolated = isolate_lru_page(page); > - else > - isolated = isolate_movable_page(page, ISOLATE_UNEVICTABLE); > - if (isolated) { > - list_add_tail(&page->lru, &source); This has a side effect that list_add_tail is replaced with list_add now. But it seems this won't cause any problem. Reviewed-by: Miaohe Lin <linmiaohe@xxxxxxxxxx> Thanks. .