From aefca998d537c09cbff13ac9ae6ce91a05789b82 Mon Sep 17 00:00:00 2001 From: ying zuxin <11154159@vivo.com> Date: Wed, 21 May 2025 11:27:01 +0800 Subject: [PATCH] ANDROID: mm/memory.c: allow do_swap_page() to allocate from CMA When __GFP_CMA was introduced in [1] it did not add __GFP_CMA for swap cache allocations. Originally that was fixed as a separate patch in [2], however in the later ACK kernels (6.1 and 6.6) this fix was squashed with new a change introducing hooks in [3]. Combining such changes is wrong, so separating __GFP_CMA changes into its own patch here. By adding __GFP_CMA flags for do_swap_page() allocations we allow swap-in page allocations to use CMA area. [1] https://android-review.googlesource.com/c/kernel/common/+/3458307 [2] https://android-review.googlesource.com/c/kernel/common/+/2068987 [3] https://android-review.googlesource.com/c/kernel/common/+/3009322 Fixes: 9223cbec5b84 ("ANDROID: cma: redirect page allocation to CMA") Bug: 417417101 Change-Id: I5f2249823cf0370c938794ad0f779c293565f2d5 Signed-off-by: ying zuxin <11154159@vivo.com> --- mm/memory.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mm/memory.c b/mm/memory.c index fa0d9ad17bd3..c48371a4ef02 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -4040,8 +4040,8 @@ static struct folio *__alloc_swap_folio(struct vm_fault *vmf) struct folio *folio; swp_entry_t entry; - folio = vma_alloc_folio(GFP_HIGHUSER_MOVABLE, 0, vma, - vmf->address, false); + folio = vma_alloc_folio(GFP_HIGHUSER_MOVABLE | __GFP_CMA, + 0, vma, vmf->address, false); if (!folio) return NULL; @@ -4351,7 +4351,8 @@ vm_fault_t do_swap_page(struct vm_fault *vmf) folio->private = NULL; } } else { - folio = swapin_readahead(entry, GFP_HIGHUSER_MOVABLE, + folio = swapin_readahead(entry, + GFP_HIGHUSER_MOVABLE | __GFP_CMA, vmf); swapcache = folio; }