linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [RFC PATCH] mm/page_alloc: Add PCP list for THP CMA
@ 2025-07-24  7:53 akash.tyagi
  2025-07-24  9:52 ` David Hildenbrand
  0 siblings, 1 reply; 25+ messages in thread
From: akash.tyagi @ 2025-07-24  7:53 UTC (permalink / raw)
  To: akpm, vbabka, matthias.bgg, angelogioacchino.delregno
  Cc: surenb, mhocko, jackmanb, hannes, ziy, linux-mm, linux-kernel,
	linux-arm-kernel, linux-mediatek, wsd_upstream, akash.tyagi

Currently, THP CMA pages share PCP lists with UNMOVABLE and RECLAIMABLE
pages. This may result in CMA THP pages being allocated from the PCP
list for other migratetypes. When this occurs, these pages may fail to
be isolated, leading to CMA allocation failures when drivers request
them.

This patch introduces a dedicated PCP list for the THP CMA migratetype,
ensuring that CMA THP pages are not mixed with other migratetypes and
remain available for CMA allocations as intended.

Signed-off-by: akash.tyagi <akash.tyagi@mediatek.com>
---
 include/linux/mmzone.h | 10 ++++++++--
 mm/page_alloc.c        |  5 +++++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index 283913d42d7b..dd93088ce851 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -696,11 +696,17 @@ enum zone_watermarks {
 
 /*
  * One per migratetype for each PAGE_ALLOC_COSTLY_ORDER. Two additional lists
- * are added for THP. One PCP list is used by GPF_MOVABLE, and the other PCP list
- * is used by GFP_UNMOVABLE and GFP_RECLAIMABLE.
+ * are added for THP: one for GFP_MOVABLE, and one for GFP_UNMOVABLE and
+ * GFP_RECLAIMABLE. With CMA enabled, an extra THP PCP list is added for
+ * MIGRATE_CMA, allowing further distinction between MIGRATE_MOVABLE and
+ * MIGRATE_CMA for THP allocations.
  */
 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
+#ifdef CONFIG_CMA
+#define NR_PCP_THP 3
+#else
 #define NR_PCP_THP 2
+#endif
 #else
 #define NR_PCP_THP 0
 #endif
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 2ef3c07266b3..35f8041afbcc 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -519,6 +519,11 @@ static inline unsigned int order_to_pindex(int migratetype, int order)
 	if (order > PAGE_ALLOC_COSTLY_ORDER) {
 		VM_BUG_ON(order != HPAGE_PMD_ORDER);
 
+#ifdef CONFIG_CMA
+		if (migratetype == MIGRATE_CMA)
+			return NR_LOWORDER_PCP_LISTS + 2;
+#endif
+
 		movable = migratetype == MIGRATE_MOVABLE;
 
 		return NR_LOWORDER_PCP_LISTS + movable;
-- 
2.18.0



^ permalink raw reply related	[flat|nested] 25+ messages in thread
* Re: [RFC PATCH] mm/page_alloc: Add PCP list for THP CMA
@ 2025-08-04 18:20 Juan Yescas
  2025-08-04 18:49 ` David Hildenbrand
  0 siblings, 1 reply; 25+ messages in thread
From: Juan Yescas @ 2025-08-04 18:20 UTC (permalink / raw)
  To: David Hildenbrand
  Cc: akash.tyagi, Andrew Morton, angelogioacchino.delregno, hannes,
	Brendan Jackman, linux-arm-kernel, linux-kernel, linux-mediatek,
	Linux Memory Management List, matthias.bgg, Michal Hocko,
	Suren Baghdasaryan, Vlastimil Babka, wsd_upstream, Zi Yan,
	Kalesh Singh, T.J. Mercier, Isaac Manjarres, Juan Yescas

Hi David/Zi,

Is there any reason why the MIGRATE_CMA pages are not in the PCP lists?

There are many devices that need fast allocation of MIGRATE_CMA pages,
and they have to get them from the buddy allocator, which is a bit
slower in comparison to the PCP lists.

We also have cases where the MIGRATE_CMA memory requirements are big.
For example, GPUs need MIGRATE_CMA memory in the ranges of 30MiB to 500MiBs.
These cases would benefit if we have THPs for CMAs.

Could we add the support for MIGRATE_CMA pages on the PCP and THP lists?

Thanks


^ permalink raw reply	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2025-08-06 21:54 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-24  7:53 [RFC PATCH] mm/page_alloc: Add PCP list for THP CMA akash.tyagi
2025-07-24  9:52 ` David Hildenbrand
2025-07-25  5:08   ` akash.tyagi
2025-07-25  7:04     ` David Hildenbrand
2025-07-25 14:27       ` Zi Yan
2025-07-29 12:30         ` akash.tyagi
2025-07-29 12:42           ` David Hildenbrand
2025-07-29 12:50           ` Matthew Wilcox
2025-08-04 18:31   ` Juan Yescas
  -- strict thread matches above, loose matches on Subject: below --
2025-08-04 18:20 Juan Yescas
2025-08-04 18:49 ` David Hildenbrand
2025-08-04 19:00   ` Zi Yan
2025-08-04 19:10     ` David Hildenbrand
2025-08-05  1:24     ` Juan Yescas
2025-08-05  1:22   ` Juan Yescas
2025-08-05  9:54     ` Vlastimil Babka
2025-08-05 16:46       ` Juan Yescas
2025-08-05 17:12       ` Juan Yescas
2025-08-05 21:09         ` Vlastimil Babka
2025-08-06 21:54           ` Juan Yescas
2025-08-05  9:58     ` David Hildenbrand
2025-08-05 16:57       ` Juan Yescas
2025-08-05 21:08         ` David Hildenbrand
2025-08-06 21:44           ` Juan Yescas
2025-08-06 21:51           ` Juan Yescas

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).