* [PATCH 1/8] sparc/mm: remove register_page_bootmem_info()
2026-05-11 14:05 [PATCH 0/8] mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE (Part 1) David Hildenbrand (Arm)
@ 2026-05-11 14:05 ` David Hildenbrand (Arm)
2026-05-12 8:28 ` Oscar Salvador
2026-05-11 14:05 ` [PATCH 2/8] mm/bootmem_info: drop initialization of page->lru David Hildenbrand (Arm)
` (8 subsequent siblings)
9 siblings, 1 reply; 28+ messages in thread
From: David Hildenbrand (Arm) @ 2026-05-11 14:05 UTC (permalink / raw)
To: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko
Cc: sparclinux, linux-kernel, linux-mm, linux-s390, linuxppc-dev,
David Hildenbrand (Arm)
sparc does not select CONFIG_HAVE_BOOTMEM_INFO_NODE, therefore,
register_page_bootmem_info_node() is a nop.
Let's just get rid of register_page_bootmem_info().
Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
---
arch/sparc/mm/init_64.c | 20 --------------------
1 file changed, 20 deletions(-)
diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
index 367c269305e5..3b679b1d1d72 100644
--- a/arch/sparc/mm/init_64.c
+++ b/arch/sparc/mm/init_64.c
@@ -27,7 +27,6 @@
#include <linux/percpu.h>
#include <linux/mmzone.h>
#include <linux/gfp.h>
-#include <linux/bootmem_info.h>
#include <asm/head.h>
#include <asm/page.h>
@@ -2477,17 +2476,6 @@ int page_in_phys_avail(unsigned long paddr)
return 0;
}
-static void __init register_page_bootmem_info(void)
-{
-#ifdef CONFIG_NUMA
- int i;
-
- for_each_online_node(i)
- if (NODE_DATA(i)->node_spanned_pages)
- register_page_bootmem_info_node(NODE_DATA(i));
-#endif
-}
-
void __init arch_setup_zero_pages(void)
{
phys_addr_t zero_page_pa = kern_base +
@@ -2498,14 +2486,6 @@ void __init arch_setup_zero_pages(void)
void __init mem_init(void)
{
- /*
- * 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();
-
if (tlb_type == cheetah || tlb_type == cheetah_plus)
cheetah_ecache_flush_init();
}
--
2.43.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* Re: [PATCH 1/8] sparc/mm: remove register_page_bootmem_info()
2026-05-11 14:05 ` [PATCH 1/8] sparc/mm: remove register_page_bootmem_info() David Hildenbrand (Arm)
@ 2026-05-12 8:28 ` Oscar Salvador
0 siblings, 0 replies; 28+ messages in thread
From: Oscar Salvador @ 2026-05-12 8:28 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
On Mon, May 11, 2026 at 04:05:29PM +0200, David Hildenbrand (Arm) wrote:
> sparc does not select CONFIG_HAVE_BOOTMEM_INFO_NODE, therefore,
> register_page_bootmem_info_node() is a nop.
>
> Let's just get rid of register_page_bootmem_info().
>
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
Acked-by: Oscar Salvador <osalvador@suse.de>
--
Oscar Salvador
SUSE Labs
^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH 2/8] mm/bootmem_info: drop initialization of page->lru
2026-05-11 14:05 [PATCH 0/8] mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE (Part 1) David Hildenbrand (Arm)
2026-05-11 14:05 ` [PATCH 1/8] sparc/mm: remove register_page_bootmem_info() David Hildenbrand (Arm)
@ 2026-05-11 14:05 ` David Hildenbrand (Arm)
2026-05-12 8:28 ` Oscar Salvador
2026-05-11 14:05 ` [PATCH 3/8] mm/bootmem_info: stop using PG_private David Hildenbrand (Arm)
` (7 subsequent siblings)
9 siblings, 1 reply; 28+ messages in thread
From: David Hildenbrand (Arm) @ 2026-05-11 14:05 UTC (permalink / raw)
To: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko
Cc: sparclinux, linux-kernel, linux-mm, linux-s390, linuxppc-dev,
David Hildenbrand (Arm)
In the past, we used to store the type in page->lru.next, introduced by
commit 5f24ce5fd34c ("thp: remove PG_buddy"). The location changed over
the years; ever since commit 0386aaa6e9c8 ("bootmem: stop using
page->index"), we store it alongside the info in page->private.
Consequently, there is no need to reset page->lru anymore.
Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
---
mm/bootmem_info.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/mm/bootmem_info.c b/mm/bootmem_info.c
index 3d7675a3ae04..a0a1ecdec8d0 100644
--- a/mm/bootmem_info.c
+++ b/mm/bootmem_info.c
@@ -34,7 +34,6 @@ void put_page_bootmem(struct page *page)
if (page_ref_dec_return(page) == 1) {
ClearPagePrivate(page);
set_page_private(page, 0);
- INIT_LIST_HEAD(&page->lru);
kmemleak_free_part_phys(PFN_PHYS(page_to_pfn(page)), PAGE_SIZE);
free_reserved_page(page);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* Re: [PATCH 2/8] mm/bootmem_info: drop initialization of page->lru
2026-05-11 14:05 ` [PATCH 2/8] mm/bootmem_info: drop initialization of page->lru David Hildenbrand (Arm)
@ 2026-05-12 8:28 ` Oscar Salvador
0 siblings, 0 replies; 28+ messages in thread
From: Oscar Salvador @ 2026-05-12 8:28 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
On Mon, May 11, 2026 at 04:05:30PM +0200, David Hildenbrand (Arm) wrote:
> In the past, we used to store the type in page->lru.next, introduced by
> commit 5f24ce5fd34c ("thp: remove PG_buddy"). The location changed over
> the years; ever since commit 0386aaa6e9c8 ("bootmem: stop using
> page->index"), we store it alongside the info in page->private.
>
> Consequently, there is no need to reset page->lru anymore.
>
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
Acked-by: Oscar Salvador <osalvador@suse.de>
--
Oscar Salvador
SUSE Labs
^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH 3/8] mm/bootmem_info: stop using PG_private
2026-05-11 14:05 [PATCH 0/8] mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE (Part 1) David Hildenbrand (Arm)
2026-05-11 14:05 ` [PATCH 1/8] sparc/mm: remove register_page_bootmem_info() David Hildenbrand (Arm)
2026-05-11 14:05 ` [PATCH 2/8] mm/bootmem_info: drop initialization of page->lru David Hildenbrand (Arm)
@ 2026-05-11 14:05 ` David Hildenbrand (Arm)
2026-05-12 8:30 ` Oscar Salvador
2026-05-11 14:05 ` [PATCH 4/8] mm/bootmem_info: remove call to kmemleak_free_part_phys() David Hildenbrand (Arm)
` (6 subsequent siblings)
9 siblings, 1 reply; 28+ messages in thread
From: David Hildenbrand (Arm) @ 2026-05-11 14:05 UTC (permalink / raw)
To: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko
Cc: sparclinux, linux-kernel, linux-mm, linux-s390, linuxppc-dev,
David Hildenbrand (Arm)
Nobody checks PG_private for these pages, and we can happily use
set_page_private() without setting PG_private. So let's just stop
setting/clearing PG_private.
Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
---
mm/bootmem_info.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/mm/bootmem_info.c b/mm/bootmem_info.c
index a0a1ecdec8d0..6e2aaab3dca9 100644
--- a/mm/bootmem_info.c
+++ b/mm/bootmem_info.c
@@ -19,7 +19,6 @@ void get_page_bootmem(unsigned long info, struct page *page,
{
BUG_ON(type > 0xf);
BUG_ON(info > (ULONG_MAX >> 4));
- SetPagePrivate(page);
set_page_private(page, info << 4 | type);
page_ref_inc(page);
}
@@ -32,7 +31,6 @@ void put_page_bootmem(struct page *page)
type > MEMORY_HOTPLUG_MAX_BOOTMEM_TYPE);
if (page_ref_dec_return(page) == 1) {
- ClearPagePrivate(page);
set_page_private(page, 0);
kmemleak_free_part_phys(PFN_PHYS(page_to_pfn(page)), PAGE_SIZE);
free_reserved_page(page);
--
2.43.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* Re: [PATCH 3/8] mm/bootmem_info: stop using PG_private
2026-05-11 14:05 ` [PATCH 3/8] mm/bootmem_info: stop using PG_private David Hildenbrand (Arm)
@ 2026-05-12 8:30 ` Oscar Salvador
0 siblings, 0 replies; 28+ messages in thread
From: Oscar Salvador @ 2026-05-12 8:30 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
On Mon, May 11, 2026 at 04:05:31PM +0200, David Hildenbrand (Arm) wrote:
> Nobody checks PG_private for these pages, and we can happily use
> set_page_private() without setting PG_private. So let's just stop
> setting/clearing PG_private.
>
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
Acked-by: Oscar Salvador <osalvador@suse.de>
--
Oscar Salvador
SUSE Labs
^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH 4/8] mm/bootmem_info: remove call to kmemleak_free_part_phys()
2026-05-11 14:05 [PATCH 0/8] mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE (Part 1) David Hildenbrand (Arm)
` (2 preceding siblings ...)
2026-05-11 14:05 ` [PATCH 3/8] mm/bootmem_info: stop using PG_private David Hildenbrand (Arm)
@ 2026-05-11 14:05 ` David Hildenbrand (Arm)
2026-05-12 8:34 ` Oscar Salvador
2026-05-11 14:05 ` [PATCH 5/8] mm/bootmem_info: stop marking the pgdat as NODE_INFO David Hildenbrand (Arm)
` (5 subsequent siblings)
9 siblings, 1 reply; 28+ messages in thread
From: David Hildenbrand (Arm) @ 2026-05-11 14:05 UTC (permalink / raw)
To: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko
Cc: sparclinux, linux-kernel, linux-mm, linux-s390, linuxppc-dev,
David Hildenbrand (Arm)
The call to kmemleak_free_part_phys() was added in 2022 in
commit dd0ff4d12dd2 ("bootmem: remove the vmemmap pages from kmemleak in
put_page_bootmem").
In 2025, commit b2aad24b5333 ("mm/memmap: prevent double scanning of memmap
by kmemleak") started to use MEMBLOCK_ALLOC_NOLEAKTRACE when allocating
the memmap to skip the kmemleak_alloc_phys() in the buddy.
So remove the call to kmemleak_free_part_phys(). If this would still
be required for other purposes, either free_reserved_page() should take
care of it, or selected users.
Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
---
include/linux/bootmem_info.h | 1 -
mm/bootmem_info.c | 1 -
2 files changed, 2 deletions(-)
diff --git a/include/linux/bootmem_info.h b/include/linux/bootmem_info.h
index 492ceeb1cdf8..f724340755e5 100644
--- a/include/linux/bootmem_info.h
+++ b/include/linux/bootmem_info.h
@@ -82,7 +82,6 @@ static inline void get_page_bootmem(unsigned long info, struct page *page,
static inline void free_bootmem_page(struct page *page)
{
- kmemleak_free_part_phys(PFN_PHYS(page_to_pfn(page)), PAGE_SIZE);
free_reserved_page(page);
}
#endif
diff --git a/mm/bootmem_info.c b/mm/bootmem_info.c
index 6e2aaab3dca9..74c1116626c8 100644
--- a/mm/bootmem_info.c
+++ b/mm/bootmem_info.c
@@ -32,7 +32,6 @@ void put_page_bootmem(struct page *page)
if (page_ref_dec_return(page) == 1) {
set_page_private(page, 0);
- kmemleak_free_part_phys(PFN_PHYS(page_to_pfn(page)), PAGE_SIZE);
free_reserved_page(page);
}
}
--
2.43.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* Re: [PATCH 4/8] mm/bootmem_info: remove call to kmemleak_free_part_phys()
2026-05-11 14:05 ` [PATCH 4/8] mm/bootmem_info: remove call to kmemleak_free_part_phys() David Hildenbrand (Arm)
@ 2026-05-12 8:34 ` Oscar Salvador
2026-05-12 8:45 ` David Hildenbrand (Arm)
0 siblings, 1 reply; 28+ messages in thread
From: Oscar Salvador @ 2026-05-12 8:34 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
On Mon, May 11, 2026 at 04:05:32PM +0200, David Hildenbrand (Arm) wrote:
> The call to kmemleak_free_part_phys() was added in 2022 in
> commit dd0ff4d12dd2 ("bootmem: remove the vmemmap pages from kmemleak in
> put_page_bootmem").
>
> In 2025, commit b2aad24b5333 ("mm/memmap: prevent double scanning of memmap
> by kmemleak") started to use MEMBLOCK_ALLOC_NOLEAKTRACE when allocating
> the memmap to skip the kmemleak_alloc_phys() in the buddy.
>
> So remove the call to kmemleak_free_part_phys(). If this would still
> be required for other purposes, either free_reserved_page() should take
> care of it, or selected users.
>
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
Reviewed-by: Oscar Salvador <osalvador@suse.de>
> ---
> include/linux/bootmem_info.h | 1 -
> mm/bootmem_info.c | 1 -
> 2 files changed, 2 deletions(-)
>
> diff --git a/include/linux/bootmem_info.h b/include/linux/bootmem_info.h
> index 492ceeb1cdf8..f724340755e5 100644
> --- a/include/linux/bootmem_info.h
> +++ b/include/linux/bootmem_info.h
> @@ -82,7 +82,6 @@ static inline void get_page_bootmem(unsigned long info, struct page *page,
>
> static inline void free_bootmem_page(struct page *page)
> {
> - kmemleak_free_part_phys(PFN_PHYS(page_to_pfn(page)), PAGE_SIZE);
> free_reserved_page(page);
> }
> #endif
> diff --git a/mm/bootmem_info.c b/mm/bootmem_info.c
> index 6e2aaab3dca9..74c1116626c8 100644
> --- a/mm/bootmem_info.c
> +++ b/mm/bootmem_info.c
> @@ -32,7 +32,6 @@ void put_page_bootmem(struct page *page)
>
> if (page_ref_dec_return(page) == 1) {
> set_page_private(page, 0);
> - kmemleak_free_part_phys(PFN_PHYS(page_to_pfn(page)), PAGE_SIZE);
A bit odd that kmemleak_free_part_phys() did not complain if we never
did kmemleak_alloc_phys() for these pages?
--
Oscar Salvador
SUSE Labs
^ permalink raw reply [flat|nested] 28+ messages in thread* Re: [PATCH 4/8] mm/bootmem_info: remove call to kmemleak_free_part_phys()
2026-05-12 8:34 ` Oscar Salvador
@ 2026-05-12 8:45 ` David Hildenbrand (Arm)
0 siblings, 0 replies; 28+ messages in thread
From: David Hildenbrand (Arm) @ 2026-05-12 8:45 UTC (permalink / raw)
To: Oscar Salvador
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
On 5/12/26 10:34, Oscar Salvador wrote:
> On Mon, May 11, 2026 at 04:05:32PM +0200, David Hildenbrand (Arm) wrote:
>> The call to kmemleak_free_part_phys() was added in 2022 in
>> commit dd0ff4d12dd2 ("bootmem: remove the vmemmap pages from kmemleak in
>> put_page_bootmem").
>>
>> In 2025, commit b2aad24b5333 ("mm/memmap: prevent double scanning of memmap
>> by kmemleak") started to use MEMBLOCK_ALLOC_NOLEAKTRACE when allocating
>> the memmap to skip the kmemleak_alloc_phys() in the buddy.
>>
>> So remove the call to kmemleak_free_part_phys(). If this would still
>> be required for other purposes, either free_reserved_page() should take
>> care of it, or selected users.
>>
>> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
>
> Reviewed-by: Oscar Salvador <osalvador@suse.de>
>
>> ---
>> include/linux/bootmem_info.h | 1 -
>> mm/bootmem_info.c | 1 -
>> 2 files changed, 2 deletions(-)
>>
>> diff --git a/include/linux/bootmem_info.h b/include/linux/bootmem_info.h
>> index 492ceeb1cdf8..f724340755e5 100644
>> --- a/include/linux/bootmem_info.h
>> +++ b/include/linux/bootmem_info.h
>> @@ -82,7 +82,6 @@ static inline void get_page_bootmem(unsigned long info, struct page *page,
>>
>> static inline void free_bootmem_page(struct page *page)
>> {
>> - kmemleak_free_part_phys(PFN_PHYS(page_to_pfn(page)), PAGE_SIZE);
>> free_reserved_page(page);
>> }
>> #endif
>> diff --git a/mm/bootmem_info.c b/mm/bootmem_info.c
>> index 6e2aaab3dca9..74c1116626c8 100644
>> --- a/mm/bootmem_info.c
>> +++ b/mm/bootmem_info.c
>> @@ -32,7 +32,6 @@ void put_page_bootmem(struct page *page)
>>
>> if (page_ref_dec_return(page) == 1) {
>> set_page_private(page, 0);
>> - kmemleak_free_part_phys(PFN_PHYS(page_to_pfn(page)), PAGE_SIZE);
>
> A bit odd that kmemleak_free_part_phys() did not complain if we never
> did kmemleak_alloc_phys() for these pages?
delete_object_part() calls __find_and_remove_object() and essentially just skips
if it didn't find anything.
Maybe the kmemleak_warn() would trigger, but it's guarded by "#ifdef DEBUG" ...
--
Cheers,
David
^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH 5/8] mm/bootmem_info: stop marking the pgdat as NODE_INFO
2026-05-11 14:05 [PATCH 0/8] mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE (Part 1) David Hildenbrand (Arm)
` (3 preceding siblings ...)
2026-05-11 14:05 ` [PATCH 4/8] mm/bootmem_info: remove call to kmemleak_free_part_phys() David Hildenbrand (Arm)
@ 2026-05-11 14:05 ` David Hildenbrand (Arm)
2026-05-12 7:45 ` Michal Hocko
2026-05-12 8:36 ` Oscar Salvador
2026-05-11 14:05 ` [PATCH 6/8] mm/bootmem_info: stop marking mem_section_usage as MIX_SECTION_INFO David Hildenbrand (Arm)
` (4 subsequent siblings)
9 siblings, 2 replies; 28+ messages in thread
From: David Hildenbrand (Arm) @ 2026-05-11 14:05 UTC (permalink / raw)
To: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko
Cc: sparclinux, linux-kernel, linux-mm, linux-s390, linuxppc-dev,
David Hildenbrand (Arm)
We removed the last user of NODE_INFO in commit 119c31caa59e ("mm/sparse:
remove !CONFIG_SPARSEMEM_VMEMMAP leftovers for CONFIG_MEMORY_HOTPLUG").
But it really was never used it besides for safety-checks ever since it was
introduced in commit 04753278769f ("memory hotplug: register section/node
id to free"), where we had the comment:
5) The node information like pgdat has similar issues. But, this
will be able to be solved too by this.
(Not implemented yet, but, remembering node id in the pages.)
Of course, that never happened, and we are not planning on freeing the
node data (pgdat/pglist_data), during memory hotunplug.
So let's just stop marking the pgdat as NODE_INFO.
Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
---
mm/bootmem_info.c | 9 +--------
1 file changed, 1 insertion(+), 8 deletions(-)
diff --git a/mm/bootmem_info.c b/mm/bootmem_info.c
index 74c1116626c8..cce1d560f094 100644
--- a/mm/bootmem_info.c
+++ b/mm/bootmem_info.c
@@ -62,15 +62,8 @@ static void __init register_page_bootmem_info_section(unsigned long start_pfn)
void __init register_page_bootmem_info_node(struct pglist_data *pgdat)
{
- unsigned long i, pfn, end_pfn, nr_pages;
+ unsigned long pfn, end_pfn;
int node = pgdat->node_id;
- struct page *page;
-
- nr_pages = PAGE_ALIGN(sizeof(struct pglist_data)) >> PAGE_SHIFT;
- page = virt_to_page(pgdat);
-
- for (i = 0; i < nr_pages; i++, page++)
- get_page_bootmem(node, page, NODE_INFO);
pfn = pgdat->node_start_pfn;
end_pfn = pgdat_end_pfn(pgdat);
--
2.43.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* Re: [PATCH 5/8] mm/bootmem_info: stop marking the pgdat as NODE_INFO
2026-05-11 14:05 ` [PATCH 5/8] mm/bootmem_info: stop marking the pgdat as NODE_INFO David Hildenbrand (Arm)
@ 2026-05-12 7:45 ` Michal Hocko
2026-05-12 7:47 ` David Hildenbrand (Arm)
2026-05-12 8:36 ` Oscar Salvador
1 sibling, 1 reply; 28+ messages in thread
From: Michal Hocko @ 2026-05-12 7:45 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, sparclinux, linux-kernel, linux-mm,
linux-s390, linuxppc-dev
On Mon 11-05-26 16:05:33, David Hildenbrand wrote:
> We removed the last user of NODE_INFO in commit 119c31caa59e ("mm/sparse:
> remove !CONFIG_SPARSEMEM_VMEMMAP leftovers for CONFIG_MEMORY_HOTPLUG").
>
> But it really was never used it besides for safety-checks ever since it was
> introduced in commit 04753278769f ("memory hotplug: register section/node
> id to free"), where we had the comment:
>
> 5) The node information like pgdat has similar issues. But, this
> will be able to be solved too by this.
> (Not implemented yet, but, remembering node id in the pages.)
>
> Of course, that never happened, and we are not planning on freeing the
> node data (pgdat/pglist_data), during memory hotunplug.
>
> So let's just stop marking the pgdat as NODE_INFO.
With the last user, shouldn't we simply drop NODE_INFO?
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
> ---
> mm/bootmem_info.c | 9 +--------
> 1 file changed, 1 insertion(+), 8 deletions(-)
>
> diff --git a/mm/bootmem_info.c b/mm/bootmem_info.c
> index 74c1116626c8..cce1d560f094 100644
> --- a/mm/bootmem_info.c
> +++ b/mm/bootmem_info.c
> @@ -62,15 +62,8 @@ static void __init register_page_bootmem_info_section(unsigned long start_pfn)
>
> void __init register_page_bootmem_info_node(struct pglist_data *pgdat)
> {
> - unsigned long i, pfn, end_pfn, nr_pages;
> + unsigned long pfn, end_pfn;
> int node = pgdat->node_id;
> - struct page *page;
> -
> - nr_pages = PAGE_ALIGN(sizeof(struct pglist_data)) >> PAGE_SHIFT;
> - page = virt_to_page(pgdat);
> -
> - for (i = 0; i < nr_pages; i++, page++)
> - get_page_bootmem(node, page, NODE_INFO);
>
> pfn = pgdat->node_start_pfn;
> end_pfn = pgdat_end_pfn(pgdat);
>
> --
> 2.43.0
>
--
Michal Hocko
SUSE Labs
^ permalink raw reply [flat|nested] 28+ messages in thread* Re: [PATCH 5/8] mm/bootmem_info: stop marking the pgdat as NODE_INFO
2026-05-12 7:45 ` Michal Hocko
@ 2026-05-12 7:47 ` David Hildenbrand (Arm)
0 siblings, 0 replies; 28+ messages in thread
From: David Hildenbrand (Arm) @ 2026-05-12 7:47 UTC (permalink / raw)
To: Michal Hocko
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, sparclinux, linux-kernel, linux-mm,
linux-s390, linuxppc-dev
On 5/12/26 09:45, Michal Hocko wrote:
> On Mon 11-05-26 16:05:33, David Hildenbrand wrote:
>> We removed the last user of NODE_INFO in commit 119c31caa59e ("mm/sparse:
>> remove !CONFIG_SPARSEMEM_VMEMMAP leftovers for CONFIG_MEMORY_HOTPLUG").
>>
>> But it really was never used it besides for safety-checks ever since it was
>> introduced in commit 04753278769f ("memory hotplug: register section/node
>> id to free"), where we had the comment:
>>
>> 5) The node information like pgdat has similar issues. But, this
>> will be able to be solved too by this.
>> (Not implemented yet, but, remembering node id in the pages.)
>>
>> Of course, that never happened, and we are not planning on freeing the
>> node data (pgdat/pglist_data), during memory hotunplug.
>>
>> So let's just stop marking the pgdat as NODE_INFO.
>
> With the last user, shouldn't we simply drop NODE_INFO?
I'll drop the whole thing in part 2.
I actually had both parts together until I stumbled into the vmmemmap x86
freeing issue that now causes conflicts until upstream and synced to the MM tree.
--
Cheers,
David
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 5/8] mm/bootmem_info: stop marking the pgdat as NODE_INFO
2026-05-11 14:05 ` [PATCH 5/8] mm/bootmem_info: stop marking the pgdat as NODE_INFO David Hildenbrand (Arm)
2026-05-12 7:45 ` Michal Hocko
@ 2026-05-12 8:36 ` Oscar Salvador
1 sibling, 0 replies; 28+ messages in thread
From: Oscar Salvador @ 2026-05-12 8:36 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
On Mon, May 11, 2026 at 04:05:33PM +0200, David Hildenbrand (Arm) wrote:
> We removed the last user of NODE_INFO in commit 119c31caa59e ("mm/sparse:
> remove !CONFIG_SPARSEMEM_VMEMMAP leftovers for CONFIG_MEMORY_HOTPLUG").
>
> But it really was never used it besides for safety-checks ever since it was
> introduced in commit 04753278769f ("memory hotplug: register section/node
> id to free"), where we had the comment:
>
> 5) The node information like pgdat has similar issues. But, this
> will be able to be solved too by this.
> (Not implemented yet, but, remembering node id in the pages.)
>
> Of course, that never happened, and we are not planning on freeing the
> node data (pgdat/pglist_data), during memory hotunplug.
>
> So let's just stop marking the pgdat as NODE_INFO.
>
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
Acked-by: Oscar Salvador <osalvador@suse.de>
--
Oscar Salvador
SUSE Labs
^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH 6/8] mm/bootmem_info: stop marking mem_section_usage as MIX_SECTION_INFO
2026-05-11 14:05 [PATCH 0/8] mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE (Part 1) David Hildenbrand (Arm)
` (4 preceding siblings ...)
2026-05-11 14:05 ` [PATCH 5/8] mm/bootmem_info: stop marking the pgdat as NODE_INFO David Hildenbrand (Arm)
@ 2026-05-11 14:05 ` David Hildenbrand (Arm)
2026-05-12 8:37 ` Oscar Salvador
2026-05-11 14:05 ` [PATCH 7/8] s390/mm: use free_reserved_page() in vmem_free_pages() David Hildenbrand (Arm)
` (3 subsequent siblings)
9 siblings, 1 reply; 28+ messages in thread
From: David Hildenbrand (Arm) @ 2026-05-11 14:05 UTC (permalink / raw)
To: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko
Cc: sparclinux, linux-kernel, linux-mm, linux-s390, linuxppc-dev,
David Hildenbrand (Arm)
We never free the ms->usage data for boot memory sections (see
section_deactivate()). And to identify whether ms->usage was allocated
from memblock, we simply identify it by looking at PG_reserved.
Consequently, there is no need to mark ms->usage as MIX_SECTION_INFO.
Let's just stop doing that.
Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
---
mm/bootmem_info.c | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)
diff --git a/mm/bootmem_info.c b/mm/bootmem_info.c
index cce1d560f094..0fa78db7fbc0 100644
--- a/mm/bootmem_info.c
+++ b/mm/bootmem_info.c
@@ -38,10 +38,8 @@ void put_page_bootmem(struct page *page)
static void __init register_page_bootmem_info_section(unsigned long start_pfn)
{
- unsigned long mapsize, section_nr, i;
+ unsigned long section_nr;
struct mem_section *ms;
- struct mem_section_usage *usage;
- struct page *page;
start_pfn = SECTION_ALIGN_DOWN(start_pfn);
section_nr = pfn_to_section_nr(start_pfn);
@@ -50,14 +48,6 @@ static void __init register_page_bootmem_info_section(unsigned long start_pfn)
if (!preinited_vmemmap_section(ms))
register_page_bootmem_memmap(section_nr, pfn_to_page(start_pfn),
PAGES_PER_SECTION);
-
- usage = ms->usage;
- page = virt_to_page(usage);
-
- mapsize = PAGE_ALIGN(mem_section_usage_size()) >> PAGE_SHIFT;
-
- for (i = 0; i < mapsize; i++, page++)
- get_page_bootmem(section_nr, page, MIX_SECTION_INFO);
}
void __init register_page_bootmem_info_node(struct pglist_data *pgdat)
--
2.43.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* Re: [PATCH 6/8] mm/bootmem_info: stop marking mem_section_usage as MIX_SECTION_INFO
2026-05-11 14:05 ` [PATCH 6/8] mm/bootmem_info: stop marking mem_section_usage as MIX_SECTION_INFO David Hildenbrand (Arm)
@ 2026-05-12 8:37 ` Oscar Salvador
0 siblings, 0 replies; 28+ messages in thread
From: Oscar Salvador @ 2026-05-12 8:37 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
On Mon, May 11, 2026 at 04:05:34PM +0200, David Hildenbrand (Arm) wrote:
> We never free the ms->usage data for boot memory sections (see
> section_deactivate()). And to identify whether ms->usage was allocated
> from memblock, we simply identify it by looking at PG_reserved.
>
> Consequently, there is no need to mark ms->usage as MIX_SECTION_INFO.
> Let's just stop doing that.
>
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
Acked-by: Oscar Salvador <osalvador@suse.de>
--
Oscar Salvador
SUSE Labs
^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH 7/8] s390/mm: use free_reserved_page() in vmem_free_pages()
2026-05-11 14:05 [PATCH 0/8] mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE (Part 1) David Hildenbrand (Arm)
` (5 preceding siblings ...)
2026-05-11 14:05 ` [PATCH 6/8] mm/bootmem_info: stop marking mem_section_usage as MIX_SECTION_INFO David Hildenbrand (Arm)
@ 2026-05-11 14:05 ` David Hildenbrand (Arm)
2026-05-11 14:21 ` Heiko Carstens
2026-05-12 8:38 ` Oscar Salvador
2026-05-11 14:05 ` [PATCH 8/8] powerpc/mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE David Hildenbrand (Arm)
` (2 subsequent siblings)
9 siblings, 2 replies; 28+ messages in thread
From: David Hildenbrand (Arm) @ 2026-05-11 14:05 UTC (permalink / raw)
To: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko
Cc: sparclinux, linux-kernel, linux-mm, linux-s390, linuxppc-dev,
David Hildenbrand (Arm)
We never select CONFIG_HAVE_BOOTMEM_INFO_NODE on s390. Therefore,
free_bootmem_page() nowadays always translates to free_reserved_page().
Let's use free_reserved_page() to replace the free_bootmem_page() loop.
We can stop including bootmem_info.h.
Likely, vmemmap freeing code could be factored out into the core in the
future.
Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
---
arch/s390/mm/vmem.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/s390/mm/vmem.c b/arch/s390/mm/vmem.c
index eeadff45e0e1..d8b2a60e0c33 100644
--- a/arch/s390/mm/vmem.c
+++ b/arch/s390/mm/vmem.c
@@ -4,7 +4,6 @@
*/
#include <linux/memory_hotplug.h>
-#include <linux/bootmem_info.h>
#include <linux/cpufeature.h>
#include <linux/memblock.h>
#include <linux/pfn.h>
@@ -51,7 +50,7 @@ static void vmem_free_pages(unsigned long addr, int order, struct vmem_altmap *a
if (PageReserved(page)) {
/* allocated from memblock */
while (nr_pages--)
- free_bootmem_page(page++);
+ free_reserved_page(page++);
} else {
free_pages(addr, order);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* Re: [PATCH 7/8] s390/mm: use free_reserved_page() in vmem_free_pages()
2026-05-11 14:05 ` [PATCH 7/8] s390/mm: use free_reserved_page() in vmem_free_pages() David Hildenbrand (Arm)
@ 2026-05-11 14:21 ` Heiko Carstens
2026-05-11 14:24 ` David Hildenbrand (Arm)
2026-05-12 8:38 ` Oscar Salvador
1 sibling, 1 reply; 28+ messages in thread
From: Heiko Carstens @ 2026-05-11 14:21 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
On Mon, May 11, 2026 at 04:05:35PM +0200, David Hildenbrand (Arm) wrote:
> We never select CONFIG_HAVE_BOOTMEM_INFO_NODE on s390. Therefore,
> free_bootmem_page() nowadays always translates to free_reserved_page().
>
> Let's use free_reserved_page() to replace the free_bootmem_page() loop.
> We can stop including bootmem_info.h.
>
> Likely, vmemmap freeing code could be factored out into the core in the
> future.
>
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
> ---
> arch/s390/mm/vmem.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/arch/s390/mm/vmem.c b/arch/s390/mm/vmem.c
> index eeadff45e0e1..d8b2a60e0c33 100644
> --- a/arch/s390/mm/vmem.c
> +++ b/arch/s390/mm/vmem.c
> @@ -4,7 +4,6 @@
> */
>
> #include <linux/memory_hotplug.h>
> -#include <linux/bootmem_info.h>
> #include <linux/cpufeature.h>
> #include <linux/memblock.h>
> #include <linux/pfn.h>
> @@ -51,7 +50,7 @@ static void vmem_free_pages(unsigned long addr, int order, struct vmem_altmap *a
> if (PageReserved(page)) {
> /* allocated from memblock */
> while (nr_pages--)
> - free_bootmem_page(page++);
> + free_reserved_page(page++);
What about the implicit call of kmemleak_free_part_phys() which gets
removed with this?
^ permalink raw reply [flat|nested] 28+ messages in thread* Re: [PATCH 7/8] s390/mm: use free_reserved_page() in vmem_free_pages()
2026-05-11 14:21 ` Heiko Carstens
@ 2026-05-11 14:24 ` David Hildenbrand (Arm)
2026-05-11 15:22 ` Heiko Carstens
0 siblings, 1 reply; 28+ messages in thread
From: David Hildenbrand (Arm) @ 2026-05-11 14:24 UTC (permalink / raw)
To: Heiko Carstens
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
On 5/11/26 16:21, Heiko Carstens wrote:
> On Mon, May 11, 2026 at 04:05:35PM +0200, David Hildenbrand (Arm) wrote:
>> We never select CONFIG_HAVE_BOOTMEM_INFO_NODE on s390. Therefore,
>> free_bootmem_page() nowadays always translates to free_reserved_page().
>>
>> Let's use free_reserved_page() to replace the free_bootmem_page() loop.
>> We can stop including bootmem_info.h.
>>
>> Likely, vmemmap freeing code could be factored out into the core in the
>> future.
>>
>> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
>> ---
>> arch/s390/mm/vmem.c | 3 +--
>> 1 file changed, 1 insertion(+), 2 deletions(-)
>>
>> diff --git a/arch/s390/mm/vmem.c b/arch/s390/mm/vmem.c
>> index eeadff45e0e1..d8b2a60e0c33 100644
>> --- a/arch/s390/mm/vmem.c
>> +++ b/arch/s390/mm/vmem.c
>> @@ -4,7 +4,6 @@
>> */
>>
>> #include <linux/memory_hotplug.h>
>> -#include <linux/bootmem_info.h>
>> #include <linux/cpufeature.h>
>> #include <linux/memblock.h>
>> #include <linux/pfn.h>
>> @@ -51,7 +50,7 @@ static void vmem_free_pages(unsigned long addr, int order, struct vmem_altmap *a
>> if (PageReserved(page)) {
>> /* allocated from memblock */
>> while (nr_pages--)
>> - free_bootmem_page(page++);
>> + free_reserved_page(page++);
>
> What about the implicit call of kmemleak_free_part_phys() which gets
> removed with this?
Thanks for taking a look!
See patch #4:
https://lore.kernel.org/r/20260511-bootmem_info_prep-v1-4-3fb0be6fc688@kernel.org
--
Cheers,
David
^ permalink raw reply [flat|nested] 28+ messages in thread* Re: [PATCH 7/8] s390/mm: use free_reserved_page() in vmem_free_pages()
2026-05-11 14:24 ` David Hildenbrand (Arm)
@ 2026-05-11 15:22 ` Heiko Carstens
2026-05-11 15:28 ` David Hildenbrand (Arm)
0 siblings, 1 reply; 28+ messages in thread
From: Heiko Carstens @ 2026-05-11 15:22 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
On Mon, May 11, 2026 at 04:24:16PM +0200, David Hildenbrand (Arm) wrote:
> On 5/11/26 16:21, Heiko Carstens wrote:
> > On Mon, May 11, 2026 at 04:05:35PM +0200, David Hildenbrand (Arm) wrote:
> >> We never select CONFIG_HAVE_BOOTMEM_INFO_NODE on s390. Therefore,
> >> free_bootmem_page() nowadays always translates to free_reserved_page().
> >>
> >> Let's use free_reserved_page() to replace the free_bootmem_page() loop.
> >> We can stop including bootmem_info.h.
> >>
> >> Likely, vmemmap freeing code could be factored out into the core in the
> >> future.
> >>
> >> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
> >> ---
> >> arch/s390/mm/vmem.c | 3 +--
> >> 1 file changed, 1 insertion(+), 2 deletions(-)
...
> > What about the implicit call of kmemleak_free_part_phys() which gets
> > removed with this?
>
> Thanks for taking a look!
>
> See patch #4:
>
> https://lore.kernel.org/r/20260511-bootmem_info_prep-v1-4-3fb0be6fc688@kernel.org
Heh, right, you can't expect from me that I would read more than one
patch of a series :)
Acked-by: Heiko Carstens <hca@linux.ibm.com>
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 7/8] s390/mm: use free_reserved_page() in vmem_free_pages()
2026-05-11 15:22 ` Heiko Carstens
@ 2026-05-11 15:28 ` David Hildenbrand (Arm)
0 siblings, 0 replies; 28+ messages in thread
From: David Hildenbrand (Arm) @ 2026-05-11 15:28 UTC (permalink / raw)
To: Heiko Carstens
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
On 5/11/26 17:22, Heiko Carstens wrote:
> On Mon, May 11, 2026 at 04:24:16PM +0200, David Hildenbrand (Arm) wrote:
>> On 5/11/26 16:21, Heiko Carstens wrote:
> ...
>>> What about the implicit call of kmemleak_free_part_phys() which gets
>>> removed with this?
>>
>> Thanks for taking a look!
>>
>> See patch #4:
>>
>> https://lore.kernel.org/r/20260511-bootmem_info_prep-v1-4-3fb0be6fc688@kernel.org
>
> Heh, right, you can't expect from me that I would read more than one
> patch of a series :)
:)
Let me add a hint that a recent patch changed that.
Thanks!
--
Cheers,
David
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 7/8] s390/mm: use free_reserved_page() in vmem_free_pages()
2026-05-11 14:05 ` [PATCH 7/8] s390/mm: use free_reserved_page() in vmem_free_pages() David Hildenbrand (Arm)
2026-05-11 14:21 ` Heiko Carstens
@ 2026-05-12 8:38 ` Oscar Salvador
1 sibling, 0 replies; 28+ messages in thread
From: Oscar Salvador @ 2026-05-12 8:38 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
On Mon, May 11, 2026 at 04:05:35PM +0200, David Hildenbrand (Arm) wrote:
> We never select CONFIG_HAVE_BOOTMEM_INFO_NODE on s390. Therefore,
> free_bootmem_page() nowadays always translates to free_reserved_page().
>
> Let's use free_reserved_page() to replace the free_bootmem_page() loop.
> We can stop including bootmem_info.h.
>
> Likely, vmemmap freeing code could be factored out into the core in the
> future.
>
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
Reviewed-by: Oscar Salvador <osalvador@suse.de>
--
Oscar Salvador
SUSE Labs
^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH 8/8] powerpc/mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE
2026-05-11 14:05 [PATCH 0/8] mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE (Part 1) David Hildenbrand (Arm)
` (6 preceding siblings ...)
2026-05-11 14:05 ` [PATCH 7/8] s390/mm: use free_reserved_page() in vmem_free_pages() David Hildenbrand (Arm)
@ 2026-05-11 14:05 ` David Hildenbrand (Arm)
2026-05-12 8:43 ` Oscar Salvador
2026-05-12 7:46 ` [PATCH 0/8] mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE (Part 1) Michal Hocko
2026-05-12 8:45 ` Oscar Salvador
9 siblings, 1 reply; 28+ messages in thread
From: David Hildenbrand (Arm) @ 2026-05-11 14:05 UTC (permalink / raw)
To: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko
Cc: sparclinux, linux-kernel, linux-mm, linux-s390, linuxppc-dev,
David Hildenbrand (Arm)
register_page_bootmem_info_node() essentially only calls
register_page_bootmem_memmap(). However, on powerpc that function is a
nop. So there is not benefit in using CONFIG_HAVE_BOOTMEM_INFO_NODE
anymore, let's just drop it.
We can stop including bootmem_info.h.
Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
---
arch/powerpc/mm/init_64.c | 8 --------
mm/Kconfig | 2 +-
2 files changed, 1 insertion(+), 9 deletions(-)
diff --git a/arch/powerpc/mm/init_64.c b/arch/powerpc/mm/init_64.c
index b6f3ae03ca9e..64f0df5bb5cd 100644
--- a/arch/powerpc/mm/init_64.c
+++ b/arch/powerpc/mm/init_64.c
@@ -41,7 +41,6 @@
#include <linux/libfdt.h>
#include <linux/memremap.h>
#include <linux/memory.h>
-#include <linux/bootmem_info.h>
#include <asm/pgalloc.h>
#include <asm/page.h>
@@ -388,13 +387,6 @@ void __ref vmemmap_free(unsigned long start, unsigned long end,
#endif
-#ifdef CONFIG_HAVE_BOOTMEM_INFO_NODE
-void register_page_bootmem_memmap(unsigned long section_nr,
- struct page *start_page, unsigned long size)
-{
-}
-#endif /* CONFIG_HAVE_BOOTMEM_INFO_NODE */
-
#endif /* CONFIG_SPARSEMEM_VMEMMAP */
#ifdef CONFIG_PPC_BOOK3S_64
diff --git a/mm/Kconfig b/mm/Kconfig
index e221fa1dc54d..97b079372325 100644
--- a/mm/Kconfig
+++ b/mm/Kconfig
@@ -537,7 +537,7 @@ endchoice
config MEMORY_HOTREMOVE
bool "Allow for memory hot remove"
- select HAVE_BOOTMEM_INFO_NODE if (X86_64 || PPC64)
+ select HAVE_BOOTMEM_INFO_NODE if X86_64
depends on MEMORY_HOTPLUG
select MIGRATION
--
2.43.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* Re: [PATCH 8/8] powerpc/mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE
2026-05-11 14:05 ` [PATCH 8/8] powerpc/mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE David Hildenbrand (Arm)
@ 2026-05-12 8:43 ` Oscar Salvador
0 siblings, 0 replies; 28+ messages in thread
From: Oscar Salvador @ 2026-05-12 8:43 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
On Mon, May 11, 2026 at 04:05:36PM +0200, David Hildenbrand (Arm) wrote:
> register_page_bootmem_info_node() essentially only calls
> register_page_bootmem_memmap(). However, on powerpc that function is a
> nop. So there is not benefit in using CONFIG_HAVE_BOOTMEM_INFO_NODE
> anymore, let's just drop it.
>
> We can stop including bootmem_info.h.
>
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
Acked-by: Oscar Salvador <osalvador@suse.de>
> ---
> arch/powerpc/mm/init_64.c | 8 --------
> mm/Kconfig | 2 +-
> 2 files changed, 1 insertion(+), 9 deletions(-)
>
> diff --git a/arch/powerpc/mm/init_64.c b/arch/powerpc/mm/init_64.c
> index b6f3ae03ca9e..64f0df5bb5cd 100644
> --- a/arch/powerpc/mm/init_64.c
> +++ b/arch/powerpc/mm/init_64.c
> @@ -41,7 +41,6 @@
> #include <linux/libfdt.h>
> #include <linux/memremap.h>
> #include <linux/memory.h>
> -#include <linux/bootmem_info.h>
>
> #include <asm/pgalloc.h>
> #include <asm/page.h>
> @@ -388,13 +387,6 @@ void __ref vmemmap_free(unsigned long start, unsigned long end,
>
> #endif
>
> -#ifdef CONFIG_HAVE_BOOTMEM_INFO_NODE
> -void register_page_bootmem_memmap(unsigned long section_nr,
> - struct page *start_page, unsigned long size)
> -{
> -}
> -#endif /* CONFIG_HAVE_BOOTMEM_INFO_NODE */
> -
> #endif /* CONFIG_SPARSEMEM_VMEMMAP */
>
> #ifdef CONFIG_PPC_BOOK3S_64
> diff --git a/mm/Kconfig b/mm/Kconfig
> index e221fa1dc54d..97b079372325 100644
> --- a/mm/Kconfig
> +++ b/mm/Kconfig
> @@ -537,7 +537,7 @@ endchoice
>
> config MEMORY_HOTREMOVE
> bool "Allow for memory hot remove"
> - select HAVE_BOOTMEM_INFO_NODE if (X86_64 || PPC64)
> + select HAVE_BOOTMEM_INFO_NODE if X86_64
> depends on MEMORY_HOTPLUG
> select MIGRATION
>
>
> --
> 2.43.0
>
>
--
Oscar Salvador
SUSE Labs
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 0/8] mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE (Part 1)
2026-05-11 14:05 [PATCH 0/8] mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE (Part 1) David Hildenbrand (Arm)
` (7 preceding siblings ...)
2026-05-11 14:05 ` [PATCH 8/8] powerpc/mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE David Hildenbrand (Arm)
@ 2026-05-12 7:46 ` Michal Hocko
2026-05-12 7:48 ` David Hildenbrand (Arm)
2026-05-12 8:45 ` Oscar Salvador
9 siblings, 1 reply; 28+ messages in thread
From: Michal Hocko @ 2026-05-12 7:46 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, sparclinux, linux-kernel, linux-mm,
linux-s390, linuxppc-dev
On Mon 11-05-26 16:05:28, David Hildenbrand wrote:
> We want to remove CONFIG_HAVE_BOOTMEM_INFO_NODE. As a first step,
> let's limit the remaining harm to x86 and core code, removing
> sparc, ppc and s390 leftovers, starting the stepwise removal by removing
> and simplifying some code.
>
> Once a related x86 vmemmap fix [1] is in, we can merge part 2 that will
> remove CONFIG_HAVE_BOOTMEM_INFO_NODE entirely.
>
> Tested on x86-64 with hugetlb vmemmap optimization in combination with
> KMEMLEAK, making sure that the problem reported in dd0ff4d12dd2 ("bootmem:
> remove the vmemmap pages from kmemleak in put_page_bootmem") does not
> reappear -- hoping I managed to trigger the original problem.
>
> Heavily cross-compiled, but let's let build bots run on it for a bit.
>
> [1] https://lore.kernel.org/r/20260429-vmemmap-v2-1-8dfcacffd877@kernel.org
>
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
> ---
> David Hildenbrand (Arm) (8):
> sparc/mm: remove register_page_bootmem_info()
> mm/bootmem_info: drop initialization of page->lru
> mm/bootmem_info: stop using PG_private
> mm/bootmem_info: remove call to kmemleak_free_part_phys()
> mm/bootmem_info: stop marking the pgdat as NODE_INFO
> mm/bootmem_info: stop marking mem_section_usage as MIX_SECTION_INFO
> s390/mm: use free_reserved_page() in vmem_free_pages()
> powerpc/mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE
>
> arch/powerpc/mm/init_64.c | 8 --------
> arch/s390/mm/vmem.c | 3 +--
> arch/sparc/mm/init_64.c | 20 --------------------
> include/linux/bootmem_info.h | 1 -
> mm/Kconfig | 2 +-
> mm/bootmem_info.c | 25 ++-----------------------
> 6 files changed, 4 insertions(+), 55 deletions(-)
Good clean up. Feel free to add
Acked-by: Michal Hocko <mhocko@suse.com>
to all patches but kmemleak one which I do not feel qualified to judge.
Thanks!
--
Michal Hocko
SUSE Labs
^ permalink raw reply [flat|nested] 28+ messages in thread* Re: [PATCH 0/8] mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE (Part 1)
2026-05-12 7:46 ` [PATCH 0/8] mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE (Part 1) Michal Hocko
@ 2026-05-12 7:48 ` David Hildenbrand (Arm)
0 siblings, 0 replies; 28+ messages in thread
From: David Hildenbrand (Arm) @ 2026-05-12 7:48 UTC (permalink / raw)
To: Michal Hocko
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, sparclinux, linux-kernel, linux-mm,
linux-s390, linuxppc-dev
On 5/12/26 09:46, Michal Hocko wrote:
> On Mon 11-05-26 16:05:28, David Hildenbrand wrote:
>> We want to remove CONFIG_HAVE_BOOTMEM_INFO_NODE. As a first step,
>> let's limit the remaining harm to x86 and core code, removing
>> sparc, ppc and s390 leftovers, starting the stepwise removal by removing
>> and simplifying some code.
>>
>> Once a related x86 vmemmap fix [1] is in, we can merge part 2 that will
>> remove CONFIG_HAVE_BOOTMEM_INFO_NODE entirely.
>>
>> Tested on x86-64 with hugetlb vmemmap optimization in combination with
>> KMEMLEAK, making sure that the problem reported in dd0ff4d12dd2 ("bootmem:
>> remove the vmemmap pages from kmemleak in put_page_bootmem") does not
>> reappear -- hoping I managed to trigger the original problem.
>>
>> Heavily cross-compiled, but let's let build bots run on it for a bit.
>>
>> [1] https://lore.kernel.org/r/20260429-vmemmap-v2-1-8dfcacffd877@kernel.org
>>
>> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
>> ---
>> David Hildenbrand (Arm) (8):
>> sparc/mm: remove register_page_bootmem_info()
>> mm/bootmem_info: drop initialization of page->lru
>> mm/bootmem_info: stop using PG_private
>> mm/bootmem_info: remove call to kmemleak_free_part_phys()
>> mm/bootmem_info: stop marking the pgdat as NODE_INFO
>> mm/bootmem_info: stop marking mem_section_usage as MIX_SECTION_INFO
>> s390/mm: use free_reserved_page() in vmem_free_pages()
>> powerpc/mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE
>>
>> arch/powerpc/mm/init_64.c | 8 --------
>> arch/s390/mm/vmem.c | 3 +--
>> arch/sparc/mm/init_64.c | 20 --------------------
>> include/linux/bootmem_info.h | 1 -
>> mm/Kconfig | 2 +-
>> mm/bootmem_info.c | 25 ++-----------------------
>> 6 files changed, 4 insertions(+), 55 deletions(-)
>
> Good clean up. Feel free to add
> Acked-by: Michal Hocko <mhocko@suse.com>
Thanks!
> to all patches but kmemleak one which I do not feel qualified to judge.
It's black magic to me as well. I tried to test that scenario in particular and
was not able to trigger the problem.
--
Cheers,
David
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 0/8] mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE (Part 1)
2026-05-11 14:05 [PATCH 0/8] mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE (Part 1) David Hildenbrand (Arm)
` (8 preceding siblings ...)
2026-05-12 7:46 ` [PATCH 0/8] mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE (Part 1) Michal Hocko
@ 2026-05-12 8:45 ` Oscar Salvador
2026-05-12 8:51 ` David Hildenbrand (Arm)
9 siblings, 1 reply; 28+ messages in thread
From: Oscar Salvador @ 2026-05-12 8:45 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
On Mon, May 11, 2026 at 04:05:28PM +0200, David Hildenbrand (Arm) wrote:
> We want to remove CONFIG_HAVE_BOOTMEM_INFO_NODE. As a first step,
> let's limit the remaining harm to x86 and core code, removing
> sparc, ppc and s390 leftovers, starting the stepwise removal by removing
> and simplifying some code.
>
> Once a related x86 vmemmap fix [1] is in, we can merge part 2 that will
> remove CONFIG_HAVE_BOOTMEM_INFO_NODE entirely.
>
> Tested on x86-64 with hugetlb vmemmap optimization in combination with
> KMEMLEAK, making sure that the problem reported in dd0ff4d12dd2 ("bootmem:
> remove the vmemmap pages from kmemleak in put_page_bootmem") does not
> reappear -- hoping I managed to trigger the original problem.
>
> Heavily cross-compiled, but let's let build bots run on it for a bit.
>
> [1] https://lore.kernel.org/r/20260429-vmemmap-v2-1-8dfcacffd877@kernel.org
>
> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
Awesome cleanup David, thanks for doing this ;-)
--
Oscar Salvador
SUSE Labs
^ permalink raw reply [flat|nested] 28+ messages in thread* Re: [PATCH 0/8] mm: remove CONFIG_HAVE_BOOTMEM_INFO_NODE (Part 1)
2026-05-12 8:45 ` Oscar Salvador
@ 2026-05-12 8:51 ` David Hildenbrand (Arm)
0 siblings, 0 replies; 28+ messages in thread
From: David Hildenbrand (Arm) @ 2026-05-12 8:51 UTC (permalink / raw)
To: Oscar Salvador
Cc: David S. Miller, Andreas Larsson, Mike Rapoport, Andrew Morton,
Alexander Gordeev, Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, Madhavan Srinivasan,
Michael Ellerman, Nicholas Piggin, Christophe Leroy (CS GROUP),
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Suren Baghdasaryan, Michal Hocko, sparclinux, linux-kernel,
linux-mm, linux-s390, linuxppc-dev
On 5/12/26 10:45, Oscar Salvador wrote:
> On Mon, May 11, 2026 at 04:05:28PM +0200, David Hildenbrand (Arm) wrote:
>> We want to remove CONFIG_HAVE_BOOTMEM_INFO_NODE. As a first step,
>> let's limit the remaining harm to x86 and core code, removing
>> sparc, ppc and s390 leftovers, starting the stepwise removal by removing
>> and simplifying some code.
>>
>> Once a related x86 vmemmap fix [1] is in, we can merge part 2 that will
>> remove CONFIG_HAVE_BOOTMEM_INFO_NODE entirely.
>>
>> Tested on x86-64 with hugetlb vmemmap optimization in combination with
>> KMEMLEAK, making sure that the problem reported in dd0ff4d12dd2 ("bootmem:
>> remove the vmemmap pages from kmemleak in put_page_bootmem") does not
>> reappear -- hoping I managed to trigger the original problem.
>>
>> Heavily cross-compiled, but let's let build bots run on it for a bit.
>>
>> [1] https://lore.kernel.org/r/20260429-vmemmap-v2-1-8dfcacffd877@kernel.org
>>
>> Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
>
> Awesome cleanup David, thanks for doing this ;-)
Thanks for the review, I'm sure you'll enjoy part 2 :)
--
Cheers,
David
^ permalink raw reply [flat|nested] 28+ messages in thread