r) has a maximum of MAX_FOLIO_NR_PAGES. Any other interpretation doesn't make any sense for MAX_FOLIO_NR_PAGES. So we have two questions: 1) How to teach MAX_FOLIO_NR_PAGES that hugetlb supports gigantic pages 2) How do we handle CONFIG_ARCH_HAS_GIGANTIC_PAGE We have the following options (A) Rename existing CONFIG_ARCH_HAS_GIGANTIC_PAGE to something else that is clearer and add a new CONFIG_ARCH_HAS_GIGANTIC_PAGE. (B) Rename existing CONFIG_ARCH_HAS_GIGANTIC_PAGE -> to something else that is clearer and derive somehow else that hugetlb in that config supports gigantic pages. (c) Just use CONFIG_ARCH_HAS_GIGANTIC_PAGE if hugetlb on an architecture supports gigantic pages. I don't quite see why an architecture should be able to opt in into dynamically allocating+freeing gigantic pages. That's just CONTIG_ALLOC magic and not some arch-specific thing IIRC. Note that in mm/hugetlb.c it is #ifdef CONFIG_ARCH_HAS_GIGANTIC_PAGE #ifdef CONFIG_CONTIG_ALLOC Meaning that at least the allocation side is guarded by CONTIG_ALLOC. So I think (C) is just the right thing to do. diff --git a/fs/Kconfig b/fs/Kconfig index 0bfdaecaa8775..12c11eb9279d3 100644 --- a/fs/Kconfig +++ b/fs/Kconfig @@ -283,6 +283,8 @@ config HUGETLB_PMD_PAGE_TABLE_SHARING def_bool HUGETLB_PAGE depends on ARCH_WANT_HUGE_PMD_SHARE && SPLIT_PMD_PTLOCKS +# An architecture must select this option if there is any mechanism (esp. hugetlb) +# could obtain gigantic folios. config ARCH_HAS_GIGANTIC_PAGE bool -- Cheers David / dhildenb(bisected) [PATCH v2 08/37] mm/hugetlb: check for unreasonable folio sizes when registering hstateDavid Hildenbrand undefinedChristophe Leroy , linux-kernel@vger.kernel.org undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined†/ƒ‰;