From: Frank van der Linden <fvdl@google.com>
To: akpm@linux-foundation.org, muchun.song@linux.dev,
linux-mm@kvack.org, linux-kernel@vger.kernel.org
Cc: yuzhao@google.com, usama.arif@bytedance.com,
joao.m.martins@oracle.com, roman.gushchin@linux.dev,
Frank van der Linden <fvdl@google.com>
Subject: [PATCH 16/27] mm/hugetlb: deal with multiple calls to hugetlb_bootmem_alloc
Date: Mon, 27 Jan 2025 23:21:56 +0000 [thread overview]
Message-ID: <20250127232207.3888640-17-fvdl@google.com> (raw)
In-Reply-To: <20250127232207.3888640-1-fvdl@google.com>
Architectures that want pre-HVO of hugetlb vmemmap pages
will need to call hugetlb_bootmem_alloc from an earlier
spot in boot (before sparse_init). To facilitate some
architectures doing this, protect hugetlb_bootmem_alloc
against multiple calls.
Also provide a helper function to check if it's been called,
so that the early HVO code, to be added later, can see if there
is anything to do.
Signed-off-by: Frank van der Linden <fvdl@google.com>
---
include/linux/hugetlb.h | 6 ++++++
mm/hugetlb.c | 12 ++++++++++++
2 files changed, 18 insertions(+)
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
index 9cd7c9dacb88..5061279e5f73 100644
--- a/include/linux/hugetlb.h
+++ b/include/linux/hugetlb.h
@@ -175,6 +175,7 @@ extern int sysctl_hugetlb_shm_group;
extern struct list_head huge_boot_pages[MAX_NUMNODES];
void hugetlb_bootmem_alloc(void);
+bool hugetlb_bootmem_allocated(void);
/* arch callbacks */
@@ -1256,6 +1257,11 @@ static inline bool hugetlbfs_pagecache_present(
static inline void hugetlb_bootmem_alloc(void)
{
}
+
+static inline bool hugetlb_bootmem_allocated(void)
+{
+ return false;
+}
#endif /* CONFIG_HUGETLB_PAGE */
static inline spinlock_t *huge_pte_lock(struct hstate *h,
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index a4d29a4f3efe..18cd232b5df2 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -4911,16 +4911,28 @@ static int __init default_hugepagesz_setup(char *s)
}
hugetlb_early_param("default_hugepagesz", default_hugepagesz_setup);
+static bool __hugetlb_bootmem_allocated __initdata;
+
+bool __init hugetlb_bootmem_allocated(void)
+{
+ return __hugetlb_bootmem_allocated;
+}
+
void __init hugetlb_bootmem_alloc(void)
{
struct hstate *h;
+ if (__hugetlb_bootmem_allocated)
+ return;
+
hugetlb_parse_params();
for_each_hstate(h) {
if (hstate_is_gigantic(h))
hugetlb_hstate_alloc_pages(h);
}
+
+ __hugetlb_bootmem_allocated = true;
}
static unsigned int allowed_mems_nr(struct hstate *h)
--
2.48.1.262.g85cc9f2d1e-goog
next prev parent reply other threads:[~2025-01-27 23:22 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-27 23:21 [PATCH 00/27] hugetlb/CMA improvements for large systems Frank van der Linden
2025-01-27 23:21 ` [PATCH 01/27] mm/cma: export total and free number of pages for CMA areas Frank van der Linden
2025-01-27 23:21 ` [PATCH 02/27] mm, cma: support multiple contiguous ranges, if requested Frank van der Linden
2025-01-28 4:19 ` Andrew Morton
2025-01-28 5:15 ` Frank van der Linden
2025-01-27 23:21 ` [PATCH 03/27] mm/cma: introduce cma_intersects function Frank van der Linden
2025-01-27 23:21 ` [PATCH 04/27] mm, hugetlb: use cma_declare_contiguous_multi Frank van der Linden
2025-01-27 23:21 ` [PATCH 05/27] mm/hugetlb: fix round-robin bootmem allocation Frank van der Linden
2025-01-27 23:21 ` [PATCH 06/27] mm/hugetlb: remove redundant __ClearPageReserved Frank van der Linden
2025-01-27 23:21 ` [PATCH 07/27] mm/hugetlb: use online nodes for bootmem allocation Frank van der Linden
2025-01-27 23:21 ` [PATCH 08/27] mm/hugetlb: convert cmdline parameters from setup to early Frank van der Linden
2025-01-27 23:21 ` [PATCH 09/27] x86/mm: make register_page_bootmem_memmap handle PTE mappings Frank van der Linden
2025-01-27 23:21 ` [PATCH 10/27] mm/bootmem_info: export register_page_bootmem_memmap Frank van der Linden
2025-01-27 23:21 ` [PATCH 11/27] mm/sparse: allow for alternate vmemmap section init at boot Frank van der Linden
2025-01-27 23:21 ` [PATCH 12/27] mm/hugetlb: set migratetype for bootmem folios Frank van der Linden
2025-01-27 23:21 ` [PATCH 13/27] mm: define __init_reserved_page_zone function Frank van der Linden
2025-01-27 23:21 ` [PATCH 14/27] mm/hugetlb: check bootmem pages for zone intersections Frank van der Linden
2025-01-27 23:21 ` [PATCH 15/27] mm/sparse: add vmemmap_*_hvo functions Frank van der Linden
2025-01-27 23:21 ` Frank van der Linden [this message]
2025-01-27 23:21 ` [PATCH 17/27] mm/hugetlb: move huge_boot_pages list init to hugetlb_bootmem_alloc Frank van der Linden
2025-01-27 23:21 ` [PATCH 18/27] mm/hugetlb: add pre-HVO framework Frank van der Linden
2025-01-27 23:21 ` [PATCH 19/27] mm/hugetlb_vmemmap: fix hugetlb_vmemmap_restore_folios definition Frank van der Linden
2025-01-27 23:22 ` [PATCH 20/27] mm/hugetlb: do pre-HVO for bootmem allocated pages Frank van der Linden
2025-01-27 23:22 ` [PATCH 21/27] x86/setup: call hugetlb_bootmem_alloc early Frank van der Linden
2025-01-27 23:22 ` [PATCH 22/27] x86/mm: set ARCH_WANT_SPARSEMEM_VMEMMAP_PREINIT Frank van der Linden
2025-01-27 23:22 ` [PATCH 23/27] mm/cma: simplify zone intersection check Frank van der Linden
2025-01-27 23:22 ` [PATCH 24/27] mm/cma: introduce a cma validate function Frank van der Linden
2025-01-27 23:22 ` [PATCH 25/27] mm/cma: introduce interface for early reservations Frank van der Linden
2025-01-27 23:22 ` [PATCH 26/27] mm/hugetlb: add hugetlb_cma_only cmdline option Frank van der Linden
2025-01-27 23:22 ` [PATCH 27/27] mm/hugetlb: enable bootmem allocation from CMA areas Frank van der Linden
2025-01-28 8:55 ` Christophe Leroy
2025-01-28 17:52 ` Frank van der Linden
2025-01-29 22:43 ` Frank van der Linden
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250127232207.3888640-17-fvdl@google.com \
--to=fvdl@google.com \
--cc=akpm@linux-foundation.org \
--cc=joao.m.martins@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=muchun.song@linux.dev \
--cc=roman.gushchin@linux.dev \
--cc=usama.arif@bytedance.com \
--cc=yuzhao@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®