Skip to content

Commit

Permalink
mm/hugetlb: copy the CMA flag when demoting
Browse files Browse the repository at this point in the history
Since commit d2d7867 ("mm/hugetlb: enable bootmem allocation from CMA
areas"), a flag is used to mark hugetlb folios as allocated from CMA. 
This flag is also used to decide if it should be freed to CMA.

However, the flag isn't copied to the smaller folios when a hugetlb folio
is broken up for demotion, which would cause it to be freed incorrectly.

Fix this by copying the flag to the smaller order hugetlb pages created
from the original one.

Link: https://lkml.kernel.org/r/20250501044325.20365-1-fvdl@google.com
Fixes: d2d7867 ("mm/hugetlb: enable bootmem allocation from CMA areas")
Signed-off-by: Frank van der Linden <fvdl@google.com>
Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com>
Reviewed-by: Oscar Salvador <osalvador@suse.de>
Reviewed-by: Jane Chu <Jane.Chu@oracle.com>
Cc: Muchun Song <muchun.song@linux.dev>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
  • Loading branch information
Frank van der Linden authored and Andrew Morton committed May 8, 2025
1 parent 9a9794a commit dac2a4f
Showing 1 changed file with 6 additions and 0 deletions.
6 changes: 6 additions & 0 deletions mm/hugetlb.c
Original file line number Diff line number Diff line change
Expand Up @@ -4034,10 +4034,13 @@ static long demote_free_hugetlb_folios(struct hstate *src, struct hstate *dst,

list_for_each_entry_safe(folio, next, src_list, lru) {
int i;
bool cma;

if (folio_test_hugetlb_vmemmap_optimized(folio))
continue;

cma = folio_test_hugetlb_cma(folio);

list_del(&folio->lru);

split_page_owner(&folio->page, huge_page_order(src), huge_page_order(dst));
Expand All @@ -4053,6 +4056,9 @@ static long demote_free_hugetlb_folios(struct hstate *src, struct hstate *dst,

new_folio->mapping = NULL;
init_new_hugetlb_folio(dst, new_folio);
/* Copy the CMA flag so that it is freed correctly */
if (cma)
folio_set_hugetlb_cma(new_folio);
list_add(&new_folio->lru, &dst_list);
}
}
Expand Down

0 comments on commit dac2a4f

Please sign in to comment.