On 4/3/24 3:47 PM, Baolin Wang wrote: > Commit 44042b449872 ("mm/page_alloc: allow high-order pages to be stored > on the per-cpu lists") extends the PCP allocator to store THP pages, and > it determines whether to cache THP pags in PCP by comparing with pageblock_order. > But the pageblock_order is not always equal to THP order, it might also > be MAX_PAGE_ORDER, which could prevent PCP from caching THP pages. > > Therefore, using HPAGE_PMD_ORDER instead to determine the need for caching > THP for PCP can fix this issue > > Fixes: 44042b449872 ("mm/page_alloc: allow high-order pages to be stored on the per-cpu lists") > Signed-off-by: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx> Acked-by: Vlastimil Babka <vbabka@xxxxxxx> > --- > mm/page_alloc.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index 1beb56f75319..915f4ef070da 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -506,7 +506,7 @@ static inline unsigned int order_to_pindex(int migratetype, int order) > { > #ifdef CONFIG_TRANSPARENT_HUGEPAGE > if (order > PAGE_ALLOC_COSTLY_ORDER) { > - VM_BUG_ON(order != pageblock_order); > + VM_BUG_ON(order != HPAGE_PMD_ORDER); > return NR_LOWORDER_PCP_LISTS; > } > #else > @@ -522,7 +522,7 @@ static inline int pindex_to_order(unsigned int pindex) > > #ifdef CONFIG_TRANSPARENT_HUGEPAGE > if (pindex == NR_LOWORDER_PCP_LISTS) > - order = pageblock_order; > + order = HPAGE_PMD_ORDER; > #else > VM_BUG_ON(order > PAGE_ALLOC_COSTLY_ORDER); > #endif > @@ -535,7 +535,7 @@ static inline bool pcp_allowed_order(unsigned int order) > if (order <= PAGE_ALLOC_COSTLY_ORDER) > return true; > #ifdef CONFIG_TRANSPARENT_HUGEPAGE > - if (order == pageblock_order) > + if (order == HPAGE_PMD_ORDER) > return true; > #endif > return false;