Hi, On 04/24/20 at 09:45am, Qian Cai wrote: > > > > On Apr 23, 2020, at 11:43 PM, Baoquan He <bhe@xxxxxxxxxx> wrote: > > > > On 04/23/20 at 05:25pm, Qian Cai wrote: > >> Compaction starts to crash below on linux-next today. The faulty page belongs to Node 0 DMA32 zone. > >> I’ll continue to narrow it down, but just want to give a headup in case someone could beat me to it. > >> > >> Debug output from free_area_init_core() > >> [ 0.000000] KK start page = ffffea0000000040, end page = ffffea0000040000, nid = 0 DMA > >> [ 0.000000] KK start page = ffffea0000040000, end page = ffffea0004000000, nid = 0 DMA32 > >> [ 0.000000] KK start page = ffffea0004000000, end page = ffffea0012000000, nid = 0 NORMAL > >> [ 0.000000] KK start page = ffffea0012000000, end page = ffffea0021fc0000, nid = 4 NORMAL > > > > Where are these printed? They are the direct mapping address of page? > > From this debug patch. Yes, direct mapping. Can you try below patch? I may get why this is caused, not sure if the place is right. diff --git a/mm/compaction.c b/mm/compaction.c index 177c11a8f3b9..e26972f26414 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -1409,7 +1409,9 @@ fast_isolate_freepages(struct compact_control *cc) cc->free_pfn = highest; } else { if (cc->direct_compaction && pfn_valid(min_pfn)) { - page = pfn_to_page(min_pfn); + page = pageblock_pfn_to_page(min_pfn, + pageblock_end_pfn(min_pfn), + cc->zone); cc->free_pfn = min_pfn; } }