Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

mm/hugetlb: check for unreasonable folio sizes when registering hstate

Let's check that no hstate that corresponds to an unreasonable folio size
is registered by an architecture. If we were to succeed registering, we
could later try allocating an unsupported gigantic folio size.

Further, let's add a BUILD_BUG_ON() for checking that HUGETLB_PAGE_ORDER
is sane at build time. As HUGETLB_PAGE_ORDER is dynamic on powerpc, we
have to use a BUILD_BUG_ON_INVALID() to make it compile.

No existing kernel configuration should be able to trigger this check:
either SPARSEMEM without SPARSEMEM_VMEMMAP cannot be configured or
gigantic folios will not exceed a memory section (the case on sparse).

Link: https://lkml.kernel.org/r/20250901150359.867252-9-david@redhat.com
Signed-off-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Zi Yan <ziy@nvidia.com>
Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Reviewed-by: Liam R. Howlett <Liam.Howlett@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

David Hildenbrand and committed by
Andrew Morton
7b4f21f5 646b67d5

+2
+2
mm/hugetlb.c
··· 4657 4657 4658 4658 BUILD_BUG_ON(sizeof_field(struct page, private) * BITS_PER_BYTE < 4659 4659 __NR_HPAGEFLAGS); 4660 + BUILD_BUG_ON_INVALID(HUGETLB_PAGE_ORDER > MAX_FOLIO_ORDER); 4660 4661 4661 4662 if (!hugepages_supported()) { 4662 4663 if (hugetlb_max_hstate || default_hstate_max_huge_pages) ··· 4741 4740 } 4742 4741 BUG_ON(hugetlb_max_hstate >= HUGE_MAX_HSTATE); 4743 4742 BUG_ON(order < order_base_2(__NR_USED_SUBPAGE)); 4743 + WARN_ON(order > MAX_FOLIO_ORDER); 4744 4744 h = &hstates[hugetlb_max_hstate++]; 4745 4745 __mutex_init(&h->resize_lock, "resize mutex", &h->resize_key); 4746 4746 h->order = order;