From nobody Sat Jul 25 15:51:51 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C014930D40B; Thu, 16 Jul 2026 14:51:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784213485; cv=none; b=bbWavXOPfbWK+fu67COkNj37qlwsBoz2GB/H6cj9kj+zTeTdnlD5/op2W3D7CLr9TZPMaya/7HcjK4LrBam7kJDnSAvYyvDmMmKVt1Jl3Rn8NK5Xu/pdcUcTjQYoMszP4z3RtrpvpE7sN7r/3MWl81NuWuDL7PyBqUpAXoA4XrQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784213485; c=relaxed/simple; bh=7mbZY915ufrCqBy6s5DZhqSr6P34AS9jh9aPiB1YHvw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bxCh4AMhAlYX+eRwWmRA17Ref43k/IG3e2NBITAnKmDYrvU6GxUhujzaWzta/PR+O77c6bXawjo+Os7SWuJabuoIluGNtsZj3d3/oL/jRGDU+jtLttnjG8GVESqHneHlyxzbtQOJ2uErMTzNcrpVi8II45JBpG49Zmp5Qpj5SE8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Df/vCrmp; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Df/vCrmp" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E8A931F00A3A; Thu, 16 Jul 2026 14:51:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784213484; bh=VRo8YFh6zUYF3ZhnWdJ55baNXlBROoBJ18GXOIHqSYs=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=Df/vCrmpv32e4O/AWaBKoao0h77SA7q12X1pjDs5yQOB6Rx+txHPKvk4MB9UU9J1A 8T6TpeC8632LXGkJwMgpTRkZVl07Dq0VUK1X8TwW0Fp5lb0d9zMokxC/fSCiZqH6DE aa2OsvAb7VMXwWNSoOYuYqyy3P0QOXmI/bPUhCidtijsaTgsSxaR4kiutceuSSKZ6v o2xu2KUzaYFtWYMuaQNIqmCqv1x0Obr4nqOnqZQYj0qlWWqdaE2qs9vSbxWhl8FLej bUuuxuqEy0soB2BgyPAjm+LyQUXQJpkM7rmaBCWAVRiY6X0Grzdq3YsBSQdGjbE1UP ApPa03RhCs8lg== From: "David Hildenbrand (Arm)" Date: Thu, 16 Jul 2026 16:51:00 +0200 Subject: [PATCH v2 01/10] x86/mm: drop order parameter from free_pagetable() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260716-bootmem_info_part2-v2-1-4afc76c73d61@kernel.org> References: <20260716-bootmem_info_part2-v2-0-4afc76c73d61@kernel.org> In-Reply-To: <20260716-bootmem_info_part2-v2-0-4afc76c73d61@kernel.org> To: Dave Hansen , Andy Lutomirski , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , x86@kernel.org, "H. Peter Anvin" , Andrew Morton , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Alexander Gordeev , Gerald Schaefer , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Sven Schnelle , Muchun Song , Oscar Salvador Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-s390@vger.kernel.org, "David Hildenbrand (Arm)" X-Mailer: b4 0.15.2 All callers pass 0, so let's drop the parameter. Reviewed-by: Mike Rapoport (Microsoft) Reviewed-by: Muchun Song Signed-off-by: David Hildenbrand (Arm) Reviewed-by: Dave Hansen Reviewed-by: Zi Yan --- arch/x86/mm/init_64.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index d57f29ca23a5a..69e36f02a663a 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c @@ -1006,22 +1006,19 @@ static void free_reserved_pages(struct page *page, = unsigned long nr_pages) free_reserved_page(page++); } =20 -static void __meminit free_pagetable(struct page *page, int order) +static void __meminit free_pagetable(struct page *page) { /* bootmem page has reserved flag */ if (PageReserved(page)) { - unsigned long nr_pages =3D 1 << order; #ifdef CONFIG_HAVE_BOOTMEM_INFO_NODE enum bootmem_type type =3D bootmem_type(page); =20 - if (type =3D=3D MIX_SECTION_INFO) { - while (nr_pages--) - put_page_bootmem(page++); - } else { - free_reserved_pages(page, nr_pages); - } + if (type =3D=3D MIX_SECTION_INFO) + put_page_bootmem(page); + else + free_reserved_page(page); #else - free_reserved_pages(page, nr_pages); + free_reserved_page(page); #endif } else { pagetable_free(page_ptdesc(page)); @@ -1060,7 +1057,7 @@ static void __meminit free_pte_table(pte_t *pte_start= , pmd_t *pmd) } =20 /* free a pte table */ - free_pagetable(pmd_page(*pmd), 0); + free_pagetable(pmd_page(*pmd)); spin_lock(&init_mm.page_table_lock); pmd_clear(pmd); spin_unlock(&init_mm.page_table_lock); @@ -1078,7 +1075,7 @@ static void __meminit free_pmd_table(pmd_t *pmd_start= , pud_t *pud) } =20 /* free a pmd table */ - free_pagetable(pud_page(*pud), 0); + free_pagetable(pud_page(*pud)); spin_lock(&init_mm.page_table_lock); pud_clear(pud); spin_unlock(&init_mm.page_table_lock); @@ -1096,7 +1093,7 @@ static void __meminit free_pud_table(pud_t *pud_start= , p4d_t *p4d) } =20 /* free a pud table */ - free_pagetable(p4d_page(*p4d), 0); + free_pagetable(p4d_page(*p4d)); spin_lock(&init_mm.page_table_lock); p4d_clear(p4d); spin_unlock(&init_mm.page_table_lock); --=20 2.43.0 From nobody Sat Jul 25 15:51:51 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 35E0830D40B; Thu, 16 Jul 2026 14:51:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784213490; cv=none; b=pJcDD3fzmHhhJpgSXAvssM08A3TPJUNZ7VbFmWfvnBbFhaA6/ryCwTMHWtqNp1SYbJYXuKdTcNmmKzqR7RonwGE0+xe+baIhha02wpe9fQWNlwWaJRIolxTMlnF9yv4Gzw/KhzR6/wlw5jDjqtCh1b/hlDuvIolllgw0fplY1N4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784213490; c=relaxed/simple; bh=62fkKqSyTuU705FaaEq0TAVQAMr3fBZklafAP9Jyqn4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XmHrqBQIE27qN46INFhDpLMVsfz7zIp9K3cZPaPdubZmwFSiCUBqgYSCqjgeBGWnZIFiPD8yJHoVl1l7k2bFbSrheJY9rWTi4RVDYIf4V7upgfqBulGTS6fLuOUVoroGE6lA9lXywWhGelcEYSR1gTFpSp7sg+zM7oWO1KkaMZA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MVucWdgV; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="MVucWdgV" Received: by smtp.kernel.org (Postfix) with ESMTPSA id ADE771F00A3E; Thu, 16 Jul 2026 14:51:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784213489; bh=lX1TFiP6xIbjy9evrHNZox00I5e7bkCckKcJldvVME4=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=MVucWdgVB3uHkthYYg4NX8x7GsFBKVscGgVa3g/uHHXEAeYf8FperTLXsPRKNBKQI LS3dPrUJ+oFBauuHY6ef3I8QQjvOJTbNW8vccNpP5NVIMJy20MooRkImJnPP05FWKf CIp+s3x3F1p7sEeFYDWskJJ29o/iW6cB90NVqln618zouzDsORVOkljdc0vz90fGW3 CNNJEW8dY782Is74iDs02CzWGU5EfZUYJUrZ5xtYYAfLnk3IkN0UhUyUzk3NF73C2T wFLu1i0M9T6BMeh8DKIBHFtzPgPuMJDyhVi5QtsgC6iM6bAd3SIpxnp0onizUfxkLc 7YZV8IDYnrf2A== From: "David Hildenbrand (Arm)" Date: Thu, 16 Jul 2026 16:51:01 +0200 Subject: [PATCH v2 02/10] mm: provide free_reserved_pages(), removing x86 variant Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260716-bootmem_info_part2-v2-2-4afc76c73d61@kernel.org> References: <20260716-bootmem_info_part2-v2-0-4afc76c73d61@kernel.org> In-Reply-To: <20260716-bootmem_info_part2-v2-0-4afc76c73d61@kernel.org> To: Dave Hansen , Andy Lutomirski , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , x86@kernel.org, "H. Peter Anvin" , Andrew Morton , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Alexander Gordeev , Gerald Schaefer , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Sven Schnelle , Muchun Song , Oscar Salvador Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-s390@vger.kernel.org, "David Hildenbrand (Arm)" X-Mailer: b4 0.15.2 Let's extend free_reserved_page() in page_alloc.c to free_reserved_pages(), dropping the custom x86 variant. The common-code variant will consume an order, so adjust the x86 callers accordingly. Make free_reserved_pages() assume that we are freeing ordinary high-order pages, just with the special "reserved" flavor. The target use case for now is freeing vmemmap PMD pages. Set the refcount directly to 0 (instead of 1) and call __free_frozen_pages(). Set the page count to 0 before clearing PG_reserved, so someone checking PG_reserved (and not finding it set) to then try grabbing a ref would not suddenly have that ref be dropped. That is arguably cleaner and safer than the old way of doing it. Add some kerneldoc. Use a single adjust_managed_page_count() call. Reviewed-by: Mike Rapoport (Microsoft) Reviewed-by: Muchun Song Signed-off-by: David Hildenbrand (Arm) Reviewed-by: Dave Hansen Reviewed-by: Zi Yan --- arch/x86/mm/init_64.c | 8 +------- include/linux/mm.h | 8 ++++++-- mm/page_alloc.c | 33 ++++++++++++++++++++++++++------- 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 69e36f02a663a..320e742b0bb3f 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c @@ -1000,12 +1000,6 @@ int arch_add_memory(int nid, u64 start, u64 size, return add_pages(nid, start_pfn, nr_pages, params); } =20 -static void free_reserved_pages(struct page *page, unsigned long nr_pages) -{ - while (nr_pages--) - free_reserved_page(page++); -} - static void __meminit free_pagetable(struct page *page) { /* bootmem page has reserved flag */ @@ -1038,7 +1032,7 @@ static void __meminit free_vmemmap_pages(struct page = *page, unsigned int order, while (nr_pages--) put_page_bootmem(page++); } else { - free_reserved_pages(page, nr_pages); + free_reserved_pages(page, order); } } else { __free_pages(page, order); diff --git a/include/linux/mm.h b/include/linux/mm.h index 113e1752548c2..62b261cccf16f 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -3993,8 +3993,12 @@ extern unsigned long free_reserved_area(void *start,= void *end, =20 extern void adjust_managed_page_count(struct page *page, long count); =20 -/* Free the reserved page into the buddy system, so it gets managed. */ -void free_reserved_page(struct page *page); +void free_reserved_pages(struct page *page, unsigned int order); + +static inline void free_reserved_page(struct page *page) +{ + free_reserved_pages(page, 0); +} =20 static inline void mark_page_reserved(struct page *page) { diff --git a/mm/page_alloc.c b/mm/page_alloc.c index a63733dac659e..2e17243ff604f 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -6381,15 +6381,34 @@ void adjust_managed_page_count(struct page *page, l= ong count) } EXPORT_SYMBOL(adjust_managed_page_count); =20 -void free_reserved_page(struct page *page) +/** + * free_reserved_pages - free reserved pages + * @page: First page to free. + * @order: The page order to free. + * + * Free pages allocated through memblock during boot, letting the buddy + * manage them from now on. + * + * @page must be naturally aligned to the order and the order must not + * exceed MAX_PAGE_ORDER. All pages must be reserved. + */ +void free_reserved_pages(struct page *page, unsigned int order) { - clear_page_tag_ref(page); - ClearPageReserved(page); - init_page_count(page); - __free_page(page); - adjust_managed_page_count(page, 1); + const unsigned long nr_pages =3D 1UL << order; + int i; + + VM_WARN_ON_ONCE(!IS_ALIGNED(page_to_pfn(page), nr_pages)); + VM_WARN_ON_ONCE(order > MAX_PAGE_ORDER); + + for (i =3D 0; i < nr_pages; i++) { + clear_page_tag_ref(page + i); + set_page_count(page + i, 0); + ClearPageReserved(page + i); + } + adjust_managed_page_count(page, nr_pages); + __free_frozen_pages(page, order, FPI_NONE); } -EXPORT_SYMBOL(free_reserved_page); +EXPORT_SYMBOL(free_reserved_pages); =20 static int page_alloc_cpu_dead(unsigned int cpu) { --=20 2.43.0 From nobody Sat Jul 25 15:51:51 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 68F0D42D75D; Thu, 16 Jul 2026 14:51:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784213495; cv=none; b=NyvNu/4LbXYJg78ExvzSbfOnZJuvE599xPTtw7VwIH6rTss6fHIBPdhkCN8zJbdTDZL+nX0ujrzrDTd5XBfu1lexHilf/u9gAfMDM1vm3z4OxcMRvhZ1fUmLnVLP/4RhRCtUV3k1OFWX3lqNW0UWnAChNrAEzdeYfXGM8IeeJXU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784213495; c=relaxed/simple; bh=X7TicotKgFD4yfSuVdOOYPx1BkmdDhSZMb1+52Ak080=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RrG4tDQ6qMIb/8CdBgtyUmaBM0YSdfjnBRJBFt1sMIQgeo1qR//1UCwjI98Y4bBp5ZtU3RlUU1GiMrRSZ19n4Ulmdb7c9kNEaXe0QADhvDZAPv/Xqif09K9tmMW4ZI4VnaBF+w5CYwmRHobTJHHZlK45nOP/nahv+UrUTTQ61eM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kpNW5sTJ; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="kpNW5sTJ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 755701F00A3D; Thu, 16 Jul 2026 14:51:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784213493; bh=8LTuIGe8Io4Hp0JGGsyty7Bh+5p268Vyx6JhVPmlFxs=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=kpNW5sTJx/u9c2MEqIOUVccXD5xnbPluojNAHtABf3edyEU1lpAsaRfDV7oPtunry XOyIS0lbUr0g5QE2bRkA/ONFQcJITWJ8R1NpULOTqPYuVcVKR+hWcXVwz9tlUkdVtB LB+FwbK8KGdBd589G5b4s53GA7AZksZD6HeBVpLa/MqktsDfcpKkFEoMKdcFX4jGAS Z7UEdNdsnbqrnmLGsutF+/yLwgo+ig80d/tvurqSewRUJ8SE8eidxQdkpo3qjkm/9A ud/FON5uINp7cQhCKVnw40CozW7MXoPCMlm1YRjEbpCqspTV/3aHYvDX6mdvuYu3LY XroHJr6x/P9Vg== From: "David Hildenbrand (Arm)" Date: Thu, 16 Jul 2026 16:51:02 +0200 Subject: [PATCH v2 03/10] s390/mm: use free_reserved_pages() in vmem_free_pages() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260716-bootmem_info_part2-v2-3-4afc76c73d61@kernel.org> References: <20260716-bootmem_info_part2-v2-0-4afc76c73d61@kernel.org> In-Reply-To: <20260716-bootmem_info_part2-v2-0-4afc76c73d61@kernel.org> To: Dave Hansen , Andy Lutomirski , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , x86@kernel.org, "H. Peter Anvin" , Andrew Morton , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Alexander Gordeev , Gerald Schaefer , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Sven Schnelle , Muchun Song , Oscar Salvador Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-s390@vger.kernel.org, "David Hildenbrand (Arm)" X-Mailer: b4 0.15.2 Let's use our new generic helper. Acked-by: Heiko Carstens Reviewed-by: Muchun Song Reviewed-by: Mike Rapoport (Microsoft) Signed-off-by: David Hildenbrand (Arm) Reviewed-by: Dave Hansen Reviewed-by: Zi Yan --- arch/s390/mm/vmem.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/arch/s390/mm/vmem.c b/arch/s390/mm/vmem.c index 94ee06ae89134..d2879ce860a13 100644 --- a/arch/s390/mm/vmem.c +++ b/arch/s390/mm/vmem.c @@ -39,7 +39,6 @@ static void __ref *vmem_alloc_pages(unsigned int order) =20 static void vmem_free_pages(unsigned long addr, int order, struct vmem_alt= map *altmap) { - unsigned int nr_pages =3D 1 << order; struct page *page; =20 if (altmap) { @@ -49,8 +48,7 @@ static void vmem_free_pages(unsigned long addr, int order= , struct vmem_altmap *a page =3D virt_to_page((void *)addr); if (PageReserved(page)) { /* allocated from memblock */ - while (nr_pages--) - free_reserved_page(page++); + free_reserved_pages(page, order); } else { free_pages(addr, order); } --=20 2.43.0 From nobody Sat Jul 25 15:51:51 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B4F1D42DFE1; Thu, 16 Jul 2026 14:51:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784213499; cv=none; b=kzPAyM243WzWzMnvWP2uNjkcYHysw6Jh+Ogpoi+/zRYHvLqnPQhZu8FmrtI+cMceeWuJ9amiG5jXg5TEWuh0ljbU1j9tVhLpJsZl+x7O2gF2GVbBwUderExBB/4BjOcemGOdyjfNagro+OtMrVQZBcTfJsw99W/WYc4cO7akSuI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784213499; c=relaxed/simple; bh=l9Eon2DAllHdR7TpivU/G/WNzIVckSN8NOjnlhaieQw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GVOQ5Usq846Ddrg+h8PAdpm4ySLi7N+UhrFNhYJOcDlE9Q19RNCMxHaqsHwKVOkFlA+GbjJPeMGPCqTxhdQfovldZRT7bH1WlV7/e44gJu//3IA9UgMNk2TwYET1EIBMxgZQ6M3NBAbU1Qs1ybuVaipCuvbXWUTRxz5BDCQd8kI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=AhJ8k2KZ; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="AhJ8k2KZ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3BB391F000E9; Thu, 16 Jul 2026 14:51:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784213498; bh=4s9VNibOd89d9UPHIC3VdfqdIw6cc3uF1PGgnXgGtOw=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=AhJ8k2KZFqliaAqjQf9LzR9AdE9YgK5D5ArxxTLTQgmgSXOf8jfqUAzF8TLTczJRU MJap6wY76tZCjiDj7rclJjZoZ284wlfh4a9aa2DxDdwThMR4DbhDdjbXyWf51LSe+0 za+FEvWACbp/mW8KFJcza2s5c8KihKE/0YKLssYt9G1TkWjLEL4V/yPv7M5HlZ09Lw hHenPzKWM1S1Xu683kFXEKUQvU3c9argQzI61tdzPrvTF5xh2nKGMbD+rGIFR019BD G9q005m9cfgBSSWmtpJJbb3wiBvD6eywjwd55FLpuHDU4kufXrC2uDd/KpjQCKcl7h bt4l/fV1Ec2yA== From: "David Hildenbrand (Arm)" Date: Thu, 16 Jul 2026 16:51:03 +0200 Subject: [PATCH v2 04/10] mm/bootmem_info: allow calling free_bootmem_page() on pages without a bootmem_type Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260716-bootmem_info_part2-v2-4-4afc76c73d61@kernel.org> References: <20260716-bootmem_info_part2-v2-0-4afc76c73d61@kernel.org> In-Reply-To: <20260716-bootmem_info_part2-v2-0-4afc76c73d61@kernel.org> To: Dave Hansen , Andy Lutomirski , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , x86@kernel.org, "H. Peter Anvin" , Andrew Morton , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Alexander Gordeev , Gerald Schaefer , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Sven Schnelle , Muchun Song , Oscar Salvador Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-s390@vger.kernel.org, "David Hildenbrand (Arm)" X-Mailer: b4 0.15.2 As preparation for further changes, let's temporarily allow freeing pages that were not previously registered. This will allow freeing unregistered vmemmap pages allocated during boot through free_bootmem_page() from hugetlb code, until we fully rip all of that out. Reviewed-by: Mike Rapoport (Microsoft) Reviewed-by: Muchun Song Signed-off-by: David Hildenbrand (Arm) Acked-by: Zi Yan Reviewed-by: Dave Hansen --- include/linux/bootmem_info.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/include/linux/bootmem_info.h b/include/linux/bootmem_info.h index f724340755e55..486acc6127039 100644 --- a/include/linux/bootmem_info.h +++ b/include/linux/bootmem_info.h @@ -44,12 +44,12 @@ static inline void free_bootmem_page(struct page *page) { enum bootmem_type type =3D bootmem_type(page); =20 - VM_BUG_ON_PAGE(page_ref_count(page) !=3D 2, page); - - if (type =3D=3D SECTION_INFO || type =3D=3D MIX_SECTION_INFO) + if (type =3D=3D SECTION_INFO || type =3D=3D MIX_SECTION_INFO) { + VM_WARN_ON_PAGE(page_ref_count(page) !=3D 2, page); put_page_bootmem(page); - else - VM_BUG_ON_PAGE(1, page); + } else { + free_reserved_page(page); + } } #else static inline void register_page_bootmem_info_node(struct pglist_data *pgd= at) --=20 2.43.0 From nobody Sat Jul 25 15:51:51 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8721142FCAD; Thu, 16 Jul 2026 14:51:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784213504; cv=none; b=Qd9YFXg/HYNmXAmgty+WC18Adk26V8JC7+y+QnhwaUpqWY31ozSkSgaJwLDWpvDzFv95ud2rklQJehvw5gnVgoWIy6vWpCRYrPh3/g8BhTrM/uEwmTmEn+cQzVgIxLMvIuU7MekV75O2mO/v5qNvJohy1oYGblJjeKZ2WSPf34s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784213504; c=relaxed/simple; bh=n3tvgN/k4UYuQ2JhAdxrtV0BlqhciU7/a8t2Zbfyzq0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=G3qfn7QLPuD9UPsE1A0W0WQY13ilhZFkAWcxO/+h7cYbt6mJDW+s/J7cVpZ7brgFf02W3CQSikjytHqOgezaOyI01OsE9Vt9bTSt4XJq2aiXdjQHJzdKkjzgQqXQfo1qqLW5l5Xxmp8uCp2VnBG1b/m9Ez9ByKRK1sJc44KhL+4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=G8J8pa/1; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="G8J8pa/1" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 017BF1F00A3D; Thu, 16 Jul 2026 14:51:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784213503; bh=Ka6zYOXsuhzx77WYU+YoIUZ4Wz6My9SyyjFFnIK2/ts=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=G8J8pa/1nRI8j8oUQnulySCu96Q8xq00a5h/GkJWgx7G0Lor9V+49krSS4vZNMTpl BjpBYfElp1gxBB+nFV7YEEbbFPxfd4VelehBfIC4A9Dn+mkA4B6RQsTbcFe+Gpb/CV EvHE5iBlPYmRMjoMrHC246WyHB1iEwkmpkLuJWUZp1Hwo6LO1xNbVMg5mVP67XtRln O+iLPelLLhHSUZbEreJXf8p7v9RlVBMtWuwuvrPsQYAQDhUfooYBBPfaolthnAojYJ ZRqXakJe0kFVulTi95mGCbNQPOBmHFlsmyWIDt8VUMs/Gt1Z23gbOtjFTJNhAsgYCf rKLUWk3nOUTiQ== From: "David Hildenbrand (Arm)" Date: Thu, 16 Jul 2026 16:51:04 +0200 Subject: [PATCH v2 05/10] x86/mm: stop marking vmemmap as SECTION_INFO Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260716-bootmem_info_part2-v2-5-4afc76c73d61@kernel.org> References: <20260716-bootmem_info_part2-v2-0-4afc76c73d61@kernel.org> In-Reply-To: <20260716-bootmem_info_part2-v2-0-4afc76c73d61@kernel.org> To: Dave Hansen , Andy Lutomirski , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , x86@kernel.org, "H. Peter Anvin" , Andrew Morton , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Alexander Gordeev , Gerald Schaefer , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Sven Schnelle , Muchun Song , Oscar Salvador Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-s390@vger.kernel.org, "David Hildenbrand (Arm)" X-Mailer: b4 0.15.2 We added the whole bootmem registration machinery in commit 04753278769f ("memory hotplug: register section/node id to free"). The main use case was to remember to which memory section memmap pages belonged, so the memmap could be handled accordingly when freeing memory. However, all that machinery is not required anymore: a memory section can only get offlined if *all* pages can get offlined; and it can only get unplugged once offline. If some of these pages are unmovable memmap pages: bad luck, doesn't work. Offlining will fail. Further, a lot of this machinery was required for pre-vmemmap support. Now we only support the vmemmap with memory hotplug. So the whole machinery is useless today. Let's start by removing the last pieces by first stopping to mark vmemmap pages as SECTION_INFO. In free_vmemmap_pages(), we can now always just free the reserved pages directly. Reviewed-by: Mike Rapoport (Microsoft) Signed-off-by: David Hildenbrand (Arm) Reviewed-by: Dave Hansen --- arch/x86/mm/init_64.c | 30 ++++-------------------------- 1 file changed, 4 insertions(+), 26 deletions(-) diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 320e742b0bb3f..82bb0384b8ab0 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c @@ -1024,19 +1024,12 @@ static void __meminit free_vmemmap_pages(struct pag= e *page, unsigned int order, { unsigned long nr_pages =3D 1u << order; =20 - if (altmap) { + if (altmap) vmem_altmap_free(altmap, nr_pages); - } else if (PageReserved(page)) { - if (IS_ENABLED(CONFIG_HAVE_BOOTMEM_INFO_NODE) && - bootmem_type(page) =3D=3D SECTION_INFO) { - while (nr_pages--) - put_page_bootmem(page++); - } else { - free_reserved_pages(page, order); - } - } else { + else if (PageReserved(page)) + free_reserved_pages(page, order); + else __free_pages(page, order); - } } =20 static void __meminit free_pte_table(pte_t *pte_start, pmd_t *pmd) @@ -1593,12 +1586,8 @@ void register_page_bootmem_memmap(unsigned long sect= ion_nr, p4d_t *p4d; pud_t *pud; pmd_t *pmd; - unsigned int nr_pmd_pages; - struct page *page; =20 for (; addr < end; addr =3D next) { - pte_t *pte =3D NULL; - pgd =3D pgd_offset_k(addr); if (pgd_none(*pgd)) { next =3D (addr + PAGE_SIZE) & PAGE_MASK; @@ -1630,19 +1619,8 @@ void register_page_bootmem_memmap(unsigned long sect= ion_nr, next =3D (addr + PAGE_SIZE) & PAGE_MASK; get_page_bootmem(section_nr, pmd_page(*pmd), MIX_SECTION_INFO); - - pte =3D pte_offset_kernel(pmd, addr); - if (pte_none(*pte)) - continue; - get_page_bootmem(section_nr, pte_page(*pte), - SECTION_INFO); } else { next =3D pmd_addr_end(addr, end); - nr_pmd_pages =3D (next - addr) >> PAGE_SHIFT; - page =3D pmd_page(*pmd); - while (nr_pmd_pages--) - get_page_bootmem(section_nr, page++, - SECTION_INFO); } } } --=20 2.43.0 From nobody Sat Jul 25 15:51:51 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8958642FCBC; Thu, 16 Jul 2026 14:51:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784213509; cv=none; b=OzOjhzPpMSyB4QJVRxJWM7UigQOy9OxwNpPwkbZBEm0wOqD6XNEcy430kalOqD8Lqd92DjRMAcan9NSajSGvygbuYbWzbP542/FlEarPksZgGUF5cnpYKOdNOBqTzgrsygBVPs8k35F86T3vlovkvX8uhnCcmE3il+8nZ0yxyAI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784213509; c=relaxed/simple; bh=0LZvdWT+Rfx+oMptt5suErjeEC7ICsoyzDbBnYxab4I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=itWYYmgnNJMCOkfL3yHG1Ib13hxwpnb9GVIRTbyyUlDCOoJ3j+lB6YUYxKlavJzmZIwyKPT2RLxUaWduvqq7gSw/0Pd+VXxO6xhjdhZMYCE3zIunHuMIb5ekQH4DvNDi46+fFVrXCHI6RY8elCAtDuz8k36a0+bu9G6Yh1sR8fM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=D0SZi0x2; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="D0SZi0x2" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BBD141F00ACA; Thu, 16 Jul 2026 14:51:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784213508; bh=KZlNFNL1P95DigwrQPayUj7ZSeB6mvVJmhz6Pdb9Szo=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=D0SZi0x2ewDGHd4eKA2+QySHkSYaEz8HLpB/rttMpOzGvhmU37FSYLPQ1UK9ZFIrl kOxUr+0fL5BewjN/mjLpF4WwMH9z61zVTmUfwLhPsBkHROtw6i6OcaWEECVxYj0CTU XLHAbhmJ5llRz7zx1Wu1WPljC1MkGN7Lk2ps7As4zzKP1PWPnnP16nH4RdmmX4TYCa PCEZJ+SmdyL8S51HNX/yv5dS4ImqdWx6mIBPvVy8zMXVSX9pBQo06+cUG9PAnurR4d tiBBetK5d9UFdLYb/wdboi314HiMLMGPNAgNnfeyBBQTvrCIyBHgh6Nu6yFXi4N4Wr 7wcSxB2Z/7PkA== From: "David Hildenbrand (Arm)" Date: Thu, 16 Jul 2026 16:51:05 +0200 Subject: [PATCH v2 06/10] x86/mm: stop marking page tables as MIX_SECTION_INFO Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260716-bootmem_info_part2-v2-6-4afc76c73d61@kernel.org> References: <20260716-bootmem_info_part2-v2-0-4afc76c73d61@kernel.org> In-Reply-To: <20260716-bootmem_info_part2-v2-0-4afc76c73d61@kernel.org> To: Dave Hansen , Andy Lutomirski , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , x86@kernel.org, "H. Peter Anvin" , Andrew Morton , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Alexander Gordeev , Gerald Schaefer , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Sven Schnelle , Muchun Song , Oscar Salvador Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-s390@vger.kernel.org, "David Hildenbrand (Arm)" X-Mailer: b4 0.15.2 There is no good reason to mark boot page tables as MIX_SECTION_INFO: we only free boot page tables when they are completely empty, and memory offlining/hotunplug doesn't benefit from it in any way. So just stop marking page tables as MIX_SECTION_INFO. In free_pagetable(), we can now simply free reserved pages directly. Reviewed-by: Mike Rapoport (Microsoft) Signed-off-by: David Hildenbrand (Arm) Reviewed-by: Dave Hansen --- arch/x86/mm/init_64.c | 59 ++---------------------------------------------= ---- 1 file changed, 2 insertions(+), 57 deletions(-) diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 82bb0384b8ab0..1b17dcf781e66 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c @@ -1002,21 +1002,10 @@ int arch_add_memory(int nid, u64 start, u64 size, =20 static void __meminit free_pagetable(struct page *page) { - /* bootmem page has reserved flag */ - if (PageReserved(page)) { -#ifdef CONFIG_HAVE_BOOTMEM_INFO_NODE - enum bootmem_type type =3D bootmem_type(page); - - if (type =3D=3D MIX_SECTION_INFO) - put_page_bootmem(page); - else - free_reserved_page(page); -#else + if (PageReserved(page)) free_reserved_page(page); -#endif - } else { + else pagetable_free(page_ptdesc(page)); - } } =20 static void __meminit free_vmemmap_pages(struct page *page, unsigned int o= rder, @@ -1579,50 +1568,6 @@ int __meminit vmemmap_populate(unsigned long start, = unsigned long end, int node, void register_page_bootmem_memmap(unsigned long section_nr, struct page *start_page, unsigned long nr_pages) { - unsigned long addr =3D (unsigned long)start_page; - unsigned long end =3D (unsigned long)(start_page + nr_pages); - unsigned long next; - pgd_t *pgd; - p4d_t *p4d; - pud_t *pud; - pmd_t *pmd; - - for (; addr < end; addr =3D next) { - pgd =3D pgd_offset_k(addr); - if (pgd_none(*pgd)) { - next =3D (addr + PAGE_SIZE) & PAGE_MASK; - continue; - } - get_page_bootmem(section_nr, pgd_page(*pgd), MIX_SECTION_INFO); - - p4d =3D p4d_offset(pgd, addr); - if (p4d_none(*p4d)) { - next =3D (addr + PAGE_SIZE) & PAGE_MASK; - continue; - } - get_page_bootmem(section_nr, p4d_page(*p4d), MIX_SECTION_INFO); - - pud =3D pud_offset(p4d, addr); - if (pud_none(*pud)) { - next =3D (addr + PAGE_SIZE) & PAGE_MASK; - continue; - } - get_page_bootmem(section_nr, pud_page(*pud), MIX_SECTION_INFO); - - pmd =3D pmd_offset(pud, addr); - if (pmd_none(*pmd)) { - next =3D (addr + PAGE_SIZE) & PAGE_MASK; - continue; - } - - if (!boot_cpu_has(X86_FEATURE_PSE) || !pmd_leaf(*pmd)) { - next =3D (addr + PAGE_SIZE) & PAGE_MASK; - get_page_bootmem(section_nr, pmd_page(*pmd), - MIX_SECTION_INFO); - } else { - next =3D pmd_addr_end(addr, end); - } - } } #endif =20 --=20 2.43.0 From nobody Sat Jul 25 15:51:51 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4434A42FCD8; Thu, 16 Jul 2026 14:51:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784213514; cv=none; b=k+oDlSftOykPOlF4K4DO20MGPHawvxM0WmIfIqMadEVYf1fwvfh2Hyx0B4h5JEnM2viJ+Jzz8OfvxLQuRDm/kBkGPO1Z95/tItyAkUw3nOkd4Q8sy7Gt81fyfky4kdVayupqnBYCPiPzEWor04wY3C0N8NHbWzp6B+OnHY+srEg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784213514; c=relaxed/simple; bh=bYbnYw4Q+fyzvXm5U8U2YE/Pwe+Ip8G+aWc9fnijAv8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jc7qYYAKeuaEj8Je4C+pxq3nPpwbNUDICo0Mr2bziJFEsm0q4zYGiSRbOwdcA3eq7Bd1zMyJX86St3ncDRj88pyTIhXW6BxJxCMj50rrRfWTbK6PfzfVsVDwtkKI+YqZMSWjIq18QHA+oLsyPKUsXuj3CiVkEhgNc2HuUXPUK0g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Ycdnm1d4; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Ycdnm1d4" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 826A41F00A3D; Thu, 16 Jul 2026 14:51:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784213512; bh=FtMdM//r+7Y276dxFFM47VzlAtz3XaD8jlXTCfCIVcY=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=Ycdnm1d42gWDnWDTRojKBNFdh5wn8uBF05tZnLmRs8D6bCVovGm6yJMGC0t9n7AF3 2MtyM/yRovly8/6vZYD80pdwY+uadMTSY5PpLij+IrGFn1v+aJE3Jao1wnjh/yfcum Rze8Ce6AMCBKiYFlunDDKvd/cP6840lu4/NnhUw0OzLC67qbmVK2OcRMG82XzPaD1H 0m9Tr402Uzow6RFwe3QIjK8mKVs+Tv52BWwGCqojl9X6n6G+K6zg/Rj2zYPQefgKRM TxhfM/wy14PKNydPBDFfgEP6QAkH7f1Ly9gi4oMUOnjop13CePyZ0y1FeOEl5nnxG0 +6OvgNjXlXVRg== From: "David Hildenbrand (Arm)" Date: Thu, 16 Jul 2026 16:51:06 +0200 Subject: [PATCH v2 07/10] x86/mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260716-bootmem_info_part2-v2-7-4afc76c73d61@kernel.org> References: <20260716-bootmem_info_part2-v2-0-4afc76c73d61@kernel.org> In-Reply-To: <20260716-bootmem_info_part2-v2-0-4afc76c73d61@kernel.org> To: Dave Hansen , Andy Lutomirski , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , x86@kernel.org, "H. Peter Anvin" , Andrew Morton , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Alexander Gordeev , Gerald Schaefer , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Sven Schnelle , Muchun Song , Oscar Salvador Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-s390@vger.kernel.org, "David Hildenbrand (Arm)" X-Mailer: b4 0.15.2 CONFIG_HAVE_BOOTMEM_INFO_NODE now essentially doesn't do anything. So let's remove support for CONFIG_HAVE_BOOTMEM_INFO_NODE. Reviewed-by: Mike Rapoport (Microsoft) Signed-off-by: David Hildenbrand (Arm) Reviewed-by: Dave Hansen --- arch/x86/mm/init_64.c | 26 -------------------------- mm/Kconfig | 1 - 2 files changed, 27 deletions(-) diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 1b17dcf781e66..ab4c5a02326f7 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c @@ -33,7 +33,6 @@ #include #include #include -#include =20 #include #include @@ -1286,16 +1285,6 @@ void __ref arch_remove_memory(u64 start, u64 size, s= truct vmem_altmap *altmap, =20 static struct kcore_list kcore_vsyscall; =20 -static void __init register_page_bootmem_info(void) -{ -#if defined(CONFIG_NUMA) || defined(CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP) - int i; - - for_each_online_node(i) - register_page_bootmem_info_node(NODE_DATA(i)); -#endif -} - /* * Pre-allocates page-table pages for the vmalloc area in the kernel page-= table. * Only the level which needs to be synchronized between all page-tables is @@ -1358,14 +1347,6 @@ void __init mem_init(void) after_bootmem =3D 1; x86_init.hyper.init_after_bootmem(); =20 - /* - * Must be done after boot memory is put on freelist, because here we - * might set fields in deferred struct pages that have not yet been - * initialized, and memblock_free_all() initializes all the reserved - * deferred pages for us. - */ - register_page_bootmem_info(); - /* Register memory areas for /proc/kcore */ if (get_gate_vma(&init_mm)) kclist_add(&kcore_vsyscall, (void *)VSYSCALL_ADDR, PAGE_SIZE, KCORE_USER= ); @@ -1564,13 +1545,6 @@ int __meminit vmemmap_populate(unsigned long start, = unsigned long end, int node, return err; } =20 -#ifdef CONFIG_HAVE_BOOTMEM_INFO_NODE -void register_page_bootmem_memmap(unsigned long section_nr, - struct page *start_page, unsigned long nr_pages) -{ -} -#endif - void __meminit vmemmap_populate_print_last(void) { if (p_start) { diff --git a/mm/Kconfig b/mm/Kconfig index f794a341d7422..592003a258bad 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -590,7 +590,6 @@ endchoice =20 config MEMORY_HOTREMOVE bool "Allow for memory hot remove" - select HAVE_BOOTMEM_INFO_NODE if X86_64 depends on MEMORY_HOTPLUG select MIGRATION =20 --=20 2.43.0 From nobody Sat Jul 25 15:51:51 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0E2CA43148C; Thu, 16 Jul 2026 14:51:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784213519; cv=none; b=bsFx1t5fCYOqQPfVLtldssWpZq63G8/RVi00tWnkaQSFKm89Lo3iYCo0tksG19UfYrrCGQoPujWPKrSOeaVZxdEizvC0ClmTLdWrvXUinBQPIZCIlDjZjWTDfdeCb/dXF8W2ja4/lAUF5qes1Agh3YWiC2ORNnZ5bHh3oRKnopA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784213519; c=relaxed/simple; bh=VmlAeOvcpPVEyjHe7dIVhuBb8NL3rqHHrNzhpT2YkZM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Sp/qpd9TI+CL0QsUvJm1ygE7cJacWGz0hdYU7xY1fNVL91iuMY59Z3Tna3+sDX+DBSVSGbhWtEuFr9GGBpNvnTVLqRcTkn6gLvtg8k4OZHMxRdHpR4mslPqVaKvOLEt9XSvCViyD6HC6l+qWuB9nQBTHYhMe+zuVAL1IUTUo120= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=VektfMeZ; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="VektfMeZ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 487C81F00ADE; Thu, 16 Jul 2026 14:51:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784213517; bh=+jMCCNNe0KRBXDTzHHXxd61yFM5vtsC3u4DIa3uGDkk=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=VektfMeZ/f54Pyk7l+Rh8MLEKJrztN9Du6wijZ63JuhlVjSkJ8PyC7dQ6TJiSQHxv vz3bYr01qA0ZNolCN1D3xwipGpqEqxX4qjbTyGPQA43zs+DYNcsltTcmFuAZet+xFM 5wvuAv/dJkPFZdNO2XdtR9H/Xih2wog/sVAiB5Zd5TrK63FS/hVYAgDYZMDrXffqJo OSEFFq52d933y4Hbsgjr1fiZVr57aZSlyaFLFF4Yl4zOp5RQsN/m5l3uXxenvQJQH/ fyW/4EGOEq3kTdVgdB3EorKK7ptbRJ1pg4abTv9momHFA6JHS3f+hpToIEzsncoujJ tqbalf0C4sxhw== From: "David Hildenbrand (Arm)" Date: Thu, 16 Jul 2026 16:51:07 +0200 Subject: [PATCH v2 08/10] mm/hugetlb_vmemmap: remove bootmem_info leftovers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260716-bootmem_info_part2-v2-8-4afc76c73d61@kernel.org> References: <20260716-bootmem_info_part2-v2-0-4afc76c73d61@kernel.org> In-Reply-To: <20260716-bootmem_info_part2-v2-0-4afc76c73d61@kernel.org> To: Dave Hansen , Andy Lutomirski , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , x86@kernel.org, "H. Peter Anvin" , Andrew Morton , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Alexander Gordeev , Gerald Schaefer , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Sven Schnelle , Muchun Song , Oscar Salvador Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-s390@vger.kernel.org, "David Hildenbrand (Arm)" X-Mailer: b4 0.15.2 We never set CONFIG_HAVE_BOOTMEM_INFO_NODE, so we can just switch to free_reserved_page() and drop the register_page_bootmem_memmap() call. Reviewed-by: Mike Rapoport (Microsoft) Reviewed-by: Muchun Song Signed-off-by: David Hildenbrand (Arm) Reviewed-by: Dave Hansen --- mm/hugetlb_vmemmap.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/mm/hugetlb_vmemmap.c b/mm/hugetlb_vmemmap.c index 1430a5aa2de57..917db0984143c 100644 --- a/mm/hugetlb_vmemmap.c +++ b/mm/hugetlb_vmemmap.c @@ -12,7 +12,6 @@ =20 #include #include -#include #include #include #include @@ -177,13 +176,13 @@ static int vmemmap_remap_range(unsigned long start, u= nsigned long end, * Free a vmemmap page. A vmemmap page can be allocated from the memblock * allocator or buddy allocator. If the PG_reserved flag is set, it means * that it allocated from the memblock allocator, just free it via the - * free_bootmem_page(). Otherwise, use __free_page(). + * free_reserved_page(). Otherwise, use __free_page(). */ static inline void free_vmemmap_page(struct page *page) { if (PageReserved(page)) { memmap_boot_pages_add(-1); - free_bootmem_page(page); + free_reserved_page(page); } else { memmap_pages_add(-1); __free_page(page); @@ -641,9 +640,6 @@ static void __hugetlb_vmemmap_optimize_folios(struct hs= tate *h, epfn =3D spfn + hugetlb_vmemmap_size(h); vmemmap_wrprotect_hvo(spfn, epfn, folio_nid(folio), HUGETLB_VMEMMAP_RESERVE_SIZE); - register_page_bootmem_memmap(pfn_to_section_nr(folio_pfn(folio)), - &folio->page, - HUGETLB_VMEMMAP_RESERVE_PAGES); continue; } =20 --=20 2.43.0 From nobody Sat Jul 25 15:51:51 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 003814314B5; Thu, 16 Jul 2026 14:52:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784213524; cv=none; b=tGqYpRI2lWcNF0CMkfwjQVVMRL2gnkNo+HQliZObx931ZBUZ0v+1anwOC+1y7p8UmKJJzDnTy/ofNxoAfthx9tLUJ2u6nbSXjUek2bR6M0m7Jz/8tTL4/O83EpJy7Ktj/pIEzT29LgNUPWwd+VHPLiGy+B+Vy8DUUZ/S4VI1isw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784213524; c=relaxed/simple; bh=kkrR5/K2jRi2BK96dPmByVsNULhGF25yHXR2DIL5Jp8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cUfrEaIsMoyJu6YCCvQs4ibnWeaDjP9tD0YDscOXnJo4ZtUQLHxN7/FBikDEwgBjTsMcvGOm7Xu2T3QxCL9fJFc772bH/E4m9/V5c7GhuZgbs8P3zjlJC5hj1v195d//3RyFaHiOpqYvyKOBX75Kxm/ThcG1hKdEsfjzI1CydM0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=AiA1vCgV; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="AiA1vCgV" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0EBCE1F00A3D; Thu, 16 Jul 2026 14:51:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784213522; bh=0SUuxKwpil1PsNN3ad6xF3FsvL/1fKwwClYjSl4zS5k=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=AiA1vCgVvUnhSNKfBex/54MWcWvKze0Y7zHZRqaJLsYUh4uUcd4OQ5SV+DDxA7ytS 4uHdc3b6gUTTjJxDjbQQm4oWAury0jD7tdDTp9Esz083Ya7ujdcsccHOCoFZidSLop i3LXTK44uEQZ4MO/spj4F16sa5/lQD1eSk5zaHkkX9FDBYpp3q7DRELn4nnhPVX8qn bIZ1Uyl6YNWX7S9yASY5uretie2wFjZfcjne7EDEWSopA8ncJVwktlaUnctzfrpBOt k7DPpZtZndfE7kk54mDXZYV3WUAXUfF1QC9PPWuUan6VO1zgd7bK3N9BOonH2ncKjp t+SyFvXlHJkOQ== From: "David Hildenbrand (Arm)" Date: Thu, 16 Jul 2026 16:51:08 +0200 Subject: [PATCH v2 09/10] mm/sparse: remove bootmem_info.h include Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260716-bootmem_info_part2-v2-9-4afc76c73d61@kernel.org> References: <20260716-bootmem_info_part2-v2-0-4afc76c73d61@kernel.org> In-Reply-To: <20260716-bootmem_info_part2-v2-0-4afc76c73d61@kernel.org> To: Dave Hansen , Andy Lutomirski , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , x86@kernel.org, "H. Peter Anvin" , Andrew Morton , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Alexander Gordeev , Gerald Schaefer , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Sven Schnelle , Muchun Song , Oscar Salvador Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-s390@vger.kernel.org, "David Hildenbrand (Arm)" X-Mailer: b4 0.15.2 No longer required, so let's remove it. Reviewed-by: Mike Rapoport (Microsoft) Reviewed-by: Muchun Song Signed-off-by: David Hildenbrand (Arm) Reviewed-by: Dave Hansen --- mm/sparse.c | 1 - 1 file changed, 1 deletion(-) diff --git a/mm/sparse.c b/mm/sparse.c index 058ef93003672..b5c74aab3379a 100644 --- a/mm/sparse.c +++ b/mm/sparse.c @@ -13,7 +13,6 @@ #include #include #include -#include #include #include "internal.h" #include --=20 2.43.0 From nobody Sat Jul 25 15:51:51 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 88758431A43; Thu, 16 Jul 2026 14:52:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784213528; cv=none; b=igEH+mWF43Z5MV1agRNlNv0nKde+7Rouo1mjv5FV0rMuhhO9g+px1deaADv0gRqktdPBoDny2NI0Cw3gD2WIARZQZQJIjmh5kISZKmkvRYWBAopjhQWSPXfi4xxnpjajt0OorxvlrMFOm5RP1L4nPQXSWhDkbdvIovVMANHqVTg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784213528; c=relaxed/simple; bh=JjZ/T2Oin3Bgacc5wSY/00mnCsFvQ2RtfjzOLUmyXco=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UyLXhFEvkDL+KhW6ZlMap711wrTM35ujQuudH34/9d7U8TS3foJXsNPtNrYSsIgDiThcVeRi1nE9AUHGcL4v+NI8eO6TJeqiPY4jSB6HHx44mUU+3lS3a/NwaBaY2yB9B1bPDtIElzFjp1XMg3PJmZDmXBaUn+VXQwf1mFFwyio= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=UaMrdrUW; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="UaMrdrUW" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EC1711F00A3E; Thu, 16 Jul 2026 14:52:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784213527; bh=tbCxj31fTIebgYa+mqqrVgf086GoCNJGRtKDlCIEv+M=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=UaMrdrUWy3G9h8W138mbxDTjLhKljYComAtLwyWn7DB7CBKuy+9ZqtTDHvHzaSKHB xcnjHtvdSuhxXASY+xBBaaHvA/32ILqO1E9STq9p/xGC7PSsYVeuAyzca/upojynWX jk+XPSTwDttKoTx/lkxSGnT7W86RQNJoOVOt0QMFtEHjdw+zKZPaR3xgzvU9kSuOX+ WnQPWZEmYAsbxB1PnhStHe3k9Hup2yE3reimdVygRDIeDeI9luq3aApqcwbNT2hc1i IJ/5VQKXbCGkylui3d3sFbS4CG5MztNJUb/xlvLXK3RhK0dLO1mW5bU08QzWXnZRvw P9OnfMIV6ICfA== From: "David Hildenbrand (Arm)" Date: Thu, 16 Jul 2026 16:51:09 +0200 Subject: [PATCH v2 10/10] mm/bootmem_info: remove CONFIG_HAVE_BOOTMEM_INFO_NODE Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260716-bootmem_info_part2-v2-10-4afc76c73d61@kernel.org> References: <20260716-bootmem_info_part2-v2-0-4afc76c73d61@kernel.org> In-Reply-To: <20260716-bootmem_info_part2-v2-0-4afc76c73d61@kernel.org> To: Dave Hansen , Andy Lutomirski , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , x86@kernel.org, "H. Peter Anvin" , Andrew Morton , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Alexander Gordeev , Gerald Schaefer , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Sven Schnelle , Muchun Song , Oscar Salvador Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-s390@vger.kernel.org, "David Hildenbrand (Arm)" X-Mailer: b4 0.15.2 The whole infrastructure is unused now. Let's remove the config option along with mm/bootmem_info. + include/linux/bootmem_info.h. Reviewed-by: Mike Rapoport (Microsoft) Reviewed-by: Muchun Song Signed-off-by: David Hildenbrand (Arm) Reviewed-by: Dave Hansen --- MAINTAINERS | 1 - include/linux/bootmem_info.h | 89 ----------------------------------------= ---- mm/Kconfig | 7 ---- mm/Makefile | 1 - mm/bootmem_info.c | 72 ----------------------------------- 5 files changed, 170 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index d19822d574fd4..9a67ae0f7865e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -16877,7 +16877,6 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/gi= t/rppt/memblock.git fixes F: Documentation/core-api/boot-time-mm.rst F: include/linux/kho/abi/memblock.h F: include/linux/memblock.h -F: mm/bootmem_info.c F: mm/memblock.c F: mm/memtest.c F: mm/mm_init.c diff --git a/include/linux/bootmem_info.h b/include/linux/bootmem_info.h deleted file mode 100644 index 486acc6127039..0000000000000 --- a/include/linux/bootmem_info.h +++ /dev/null @@ -1,89 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -#ifndef __LINUX_BOOTMEM_INFO_H -#define __LINUX_BOOTMEM_INFO_H - -#include -#include - -/* - * Types for free bootmem stored in the low bits of page->private. - */ -enum bootmem_type { - MEMORY_HOTPLUG_MIN_BOOTMEM_TYPE =3D 1, - SECTION_INFO =3D MEMORY_HOTPLUG_MIN_BOOTMEM_TYPE, - MIX_SECTION_INFO, - NODE_INFO, - MEMORY_HOTPLUG_MAX_BOOTMEM_TYPE =3D NODE_INFO, -}; - -#ifdef CONFIG_HAVE_BOOTMEM_INFO_NODE -void __init register_page_bootmem_info_node(struct pglist_data *pgdat); -void register_page_bootmem_memmap(unsigned long section_nr, struct page *m= ap, - unsigned long nr_pages); - -void get_page_bootmem(unsigned long info, struct page *page, - enum bootmem_type type); -void put_page_bootmem(struct page *page); - -static inline enum bootmem_type bootmem_type(const struct page *page) -{ - return (unsigned long)page->private & 0xf; -} - -static inline unsigned long bootmem_info(const struct page *page) -{ - return (unsigned long)page->private >> 4; -} - -/* - * Any memory allocated via the memblock allocator and not via the - * buddy will be marked reserved already in the memmap. For those - * pages, we can call this function to free it to buddy allocator. - */ -static inline void free_bootmem_page(struct page *page) -{ - enum bootmem_type type =3D bootmem_type(page); - - if (type =3D=3D SECTION_INFO || type =3D=3D MIX_SECTION_INFO) { - VM_WARN_ON_PAGE(page_ref_count(page) !=3D 2, page); - put_page_bootmem(page); - } else { - free_reserved_page(page); - } -} -#else -static inline void register_page_bootmem_info_node(struct pglist_data *pgd= at) -{ -} - -static inline void register_page_bootmem_memmap(unsigned long section_nr, - struct page *map, unsigned long nr_pages) -{ -} - -static inline void put_page_bootmem(struct page *page) -{ -} - -static inline enum bootmem_type bootmem_type(const struct page *page) -{ - return SECTION_INFO; -} - -static inline unsigned long bootmem_info(const struct page *page) -{ - return 0; -} - -static inline void get_page_bootmem(unsigned long info, struct page *page, - enum bootmem_type type) -{ -} - -static inline void free_bootmem_page(struct page *page) -{ - free_reserved_page(page); -} -#endif - -#endif /* __LINUX_BOOTMEM_INFO_H */ diff --git a/mm/Kconfig b/mm/Kconfig index 592003a258bad..169a3ba12a255 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -509,13 +509,6 @@ config EXCLUSIVE_SYSTEM_RAM def_bool y depends on !DEVMEM || STRICT_DEVMEM =20 -# -# Only be set on architectures that have completely implemented memory hot= plug -# feature. If you are not sure, don't touch it. -# -config HAVE_BOOTMEM_INFO_NODE - def_bool n - config ARCH_ENABLE_MEMORY_HOTPLUG bool =20 diff --git a/mm/Makefile b/mm/Makefile index 4fc713867b9bd..52428a3d3ae14 100644 --- a/mm/Makefile +++ b/mm/Makefile @@ -141,7 +141,6 @@ obj-$(CONFIG_MEMFD_CREATE) +=3D memfd.o obj-$(CONFIG_MAPPING_DIRTY_HELPERS) +=3D mapping_dirty_helpers.o obj-$(CONFIG_PTDUMP) +=3D ptdump.o obj-$(CONFIG_PAGE_REPORTING) +=3D page_reporting.o -obj-$(CONFIG_HAVE_BOOTMEM_INFO_NODE) +=3D bootmem_info.o obj-$(CONFIG_GENERIC_IOREMAP) +=3D ioremap.o obj-$(CONFIG_SHRINKER_DEBUG) +=3D shrinker_debug.o obj-$(CONFIG_EXECMEM) +=3D execmem.o diff --git a/mm/bootmem_info.c b/mm/bootmem_info.c deleted file mode 100644 index 0fa78db7fbc0b..0000000000000 --- a/mm/bootmem_info.c +++ /dev/null @@ -1,72 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * Bootmem core functions. - * - * Copyright (c) 2020, Bytedance. - * - * Author: Muchun Song - * - */ -#include -#include -#include -#include -#include -#include - -void get_page_bootmem(unsigned long info, struct page *page, - enum bootmem_type type) -{ - BUG_ON(type > 0xf); - BUG_ON(info > (ULONG_MAX >> 4)); - set_page_private(page, info << 4 | type); - page_ref_inc(page); -} - -void put_page_bootmem(struct page *page) -{ - enum bootmem_type type =3D bootmem_type(page); - - BUG_ON(type < MEMORY_HOTPLUG_MIN_BOOTMEM_TYPE || - type > MEMORY_HOTPLUG_MAX_BOOTMEM_TYPE); - - if (page_ref_dec_return(page) =3D=3D 1) { - set_page_private(page, 0); - free_reserved_page(page); - } -} - -static void __init register_page_bootmem_info_section(unsigned long start_= pfn) -{ - unsigned long section_nr; - struct mem_section *ms; - - start_pfn =3D SECTION_ALIGN_DOWN(start_pfn); - section_nr =3D pfn_to_section_nr(start_pfn); - ms =3D __nr_to_section(section_nr); - - if (!preinited_vmemmap_section(ms)) - register_page_bootmem_memmap(section_nr, pfn_to_page(start_pfn), - PAGES_PER_SECTION); -} - -void __init register_page_bootmem_info_node(struct pglist_data *pgdat) -{ - unsigned long pfn, end_pfn; - int node =3D pgdat->node_id; - - pfn =3D pgdat->node_start_pfn; - end_pfn =3D pgdat_end_pfn(pgdat); - - /* register section info */ - for (; pfn < end_pfn; pfn +=3D PAGES_PER_SECTION) { - /* - * Some platforms can assign the same pfn to multiple nodes - on - * node0 as well as nodeN. To avoid registering a pfn against - * multiple nodes we check that this pfn does not already - * reside in some other nodes. - */ - if (pfn_valid(pfn) && (early_pfn_to_nid(pfn) =3D=3D node)) - register_page_bootmem_info_section(pfn); - } -} --=20 2.43.0