* [PATCH] mm/page_ext: remove pgdat_page_ext_init()
@ 2026-08-03 13:48 Sang-Heon Jeon
2026-08-04 1:35 ` Zi Yan
0 siblings, 1 reply; 3+ messages in thread
From: Sang-Heon Jeon @ 2026-08-03 13:48 UTC (permalink / raw)
To: Andrew Morton, David Hildenbrand, Mike Rapoport, Vlastimil Babka
Cc: Brendan Jackman, Johannes Weiner, Liam R. Howlett, linux-mm,
Lorenzo Stoakes, Michal Hocko, Suren Baghdasaryan, Zi Yan
pgdat_page_ext_init() sets pgdat->node_page_ext to NULL only on
FLATMEM. FLATMEM depends on !NUMA on every architecture, so the
pgdat is always the zero-initialized contig_page_data and the store
has no effect.
So remove the call site, the unused function and its declaration.
No functional change.
Signed-off-by: Sang-Heon Jeon <ekffu200098@gmail.com>
---
include/linux/page_ext.h | 5 -----
mm/mm_init.c | 1 -
mm/page_ext.c | 9 ---------
3 files changed, 15 deletions(-)
diff --git a/include/linux/page_ext.h b/include/linux/page_ext.h
index f23d4b218da0..79c53ec45dfa 100644
--- a/include/linux/page_ext.h
+++ b/include/linux/page_ext.h
@@ -55,7 +55,6 @@ struct page_ext {
extern bool early_page_ext;
extern unsigned long page_ext_size;
-extern void pgdat_page_ext_init(struct pglist_data *pgdat);
static inline bool early_page_ext_enabled(void)
{
@@ -202,10 +201,6 @@ static inline bool early_page_ext_enabled(void)
return false;
}
-static inline void pgdat_page_ext_init(struct pglist_data *pgdat)
-{
-}
-
static inline void page_ext_init(void)
{
}
diff --git a/mm/mm_init.c b/mm/mm_init.c
index 711f821f7b3c..e9c4204b73ad 100644
--- a/mm/mm_init.c
+++ b/mm/mm_init.c
@@ -1394,7 +1394,6 @@ static void __meminit pgdat_init_internals(struct pglist_data *pgdat)
for (i = 0; i < NR_VMSCAN_THROTTLE; i++)
init_waitqueue_head(&pgdat->reclaim_wait[i]);
- pgdat_page_ext_init(pgdat);
lruvec_init(&pgdat->__lruvec);
}
diff --git a/mm/page_ext.c b/mm/page_ext.c
index e2e92bd27ebd..b679a8c1f7d7 100644
--- a/mm/page_ext.c
+++ b/mm/page_ext.c
@@ -164,11 +164,6 @@ void __init page_ext_init_flatmem_late(void)
invoke_init_callbacks();
}
-void __meminit pgdat_page_ext_init(struct pglist_data *pgdat)
-{
- pgdat->node_page_ext = NULL;
-}
-
static struct page_ext *lookup_page_ext(const struct page *page)
{
unsigned long pfn = page_to_pfn(page);
@@ -494,10 +489,6 @@ void __init page_ext_init(void)
panic("Out of memory");
}
-void __meminit pgdat_page_ext_init(struct pglist_data *pgdat)
-{
-}
-
#endif
/**
--
2.43.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] mm/page_ext: remove pgdat_page_ext_init()
2026-08-03 13:48 [PATCH] mm/page_ext: remove pgdat_page_ext_init() Sang-Heon Jeon
@ 2026-08-04 1:35 ` Zi Yan
2026-08-04 4:17 ` Sang-Heon Jeon
0 siblings, 1 reply; 3+ messages in thread
From: Zi Yan @ 2026-08-04 1:35 UTC (permalink / raw)
To: Sang-Heon Jeon, Andrew Morton, David Hildenbrand, Mike Rapoport,
Vlastimil Babka
Cc: Brendan Jackman, Johannes Weiner, Liam R. Howlett, linux-mm,
Lorenzo Stoakes, Michal Hocko, Suren Baghdasaryan
On Mon Aug 3, 2026 at 9:48 AM EDT, Sang-Heon Jeon wrote:
> pgdat_page_ext_init() sets pgdat->node_page_ext to NULL only on
> FLATMEM. FLATMEM depends on !NUMA on every architecture, so the
Should we add "depends on !NUMA" to FLATMEM and FLATMEM_MANUAL to
prevent FLATMEM + NUMA being possible? Otherwise, FLATMEM + NUMA can
have issues with pgdat_page_ext_init() being removed. I understand that
no arch supports FLATMEM + NUMA.
> pgdat is always the zero-initialized contig_page_data and the store
> has no effect.
>
> So remove the call site, the unused function and its declaration.
>
> No functional change.
>
> Signed-off-by: Sang-Heon Jeon <ekffu200098@gmail.com>
> ---
> include/linux/page_ext.h | 5 -----
> mm/mm_init.c | 1 -
> mm/page_ext.c | 9 ---------
> 3 files changed, 15 deletions(-)
>
> diff --git a/include/linux/page_ext.h b/include/linux/page_ext.h
> index f23d4b218da0..79c53ec45dfa 100644
> --- a/include/linux/page_ext.h
> +++ b/include/linux/page_ext.h
> @@ -55,7 +55,6 @@ struct page_ext {
>
> extern bool early_page_ext;
> extern unsigned long page_ext_size;
> -extern void pgdat_page_ext_init(struct pglist_data *pgdat);
>
> static inline bool early_page_ext_enabled(void)
> {
> @@ -202,10 +201,6 @@ static inline bool early_page_ext_enabled(void)
> return false;
> }
>
> -static inline void pgdat_page_ext_init(struct pglist_data *pgdat)
> -{
> -}
> -
> static inline void page_ext_init(void)
> {
> }
> diff --git a/mm/mm_init.c b/mm/mm_init.c
> index 711f821f7b3c..e9c4204b73ad 100644
> --- a/mm/mm_init.c
> +++ b/mm/mm_init.c
> @@ -1394,7 +1394,6 @@ static void __meminit pgdat_init_internals(struct pglist_data *pgdat)
> for (i = 0; i < NR_VMSCAN_THROTTLE; i++)
> init_waitqueue_head(&pgdat->reclaim_wait[i]);
>
> - pgdat_page_ext_init(pgdat);
> lruvec_init(&pgdat->__lruvec);
> }
>
> diff --git a/mm/page_ext.c b/mm/page_ext.c
> index e2e92bd27ebd..b679a8c1f7d7 100644
> --- a/mm/page_ext.c
> +++ b/mm/page_ext.c
> @@ -164,11 +164,6 @@ void __init page_ext_init_flatmem_late(void)
> invoke_init_callbacks();
> }
>
> -void __meminit pgdat_page_ext_init(struct pglist_data *pgdat)
> -{
> - pgdat->node_page_ext = NULL;
> -}
> -
> static struct page_ext *lookup_page_ext(const struct page *page)
> {
> unsigned long pfn = page_to_pfn(page);
> @@ -494,10 +489,6 @@ void __init page_ext_init(void)
> panic("Out of memory");
> }
>
> -void __meminit pgdat_page_ext_init(struct pglist_data *pgdat)
> -{
> -}
> -
> #endif
>
> /**
--
Best Regards,
Yan, Zi
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] mm/page_ext: remove pgdat_page_ext_init()
2026-08-04 1:35 ` Zi Yan
@ 2026-08-04 4:17 ` Sang-Heon Jeon
0 siblings, 0 replies; 3+ messages in thread
From: Sang-Heon Jeon @ 2026-08-04 4:17 UTC (permalink / raw)
To: Zi Yan
Cc: Andrew Morton, David Hildenbrand, Mike Rapoport, Vlastimil Babka,
Brendan Jackman, Johannes Weiner, Liam R. Howlett, linux-mm,
Lorenzo Stoakes, Michal Hocko, Suren Baghdasaryan
Hello,
On Tue, Aug 4, 2026 at 10:35 AM Zi Yan <ziy@nvidia.com> wrote:
>
> On Mon Aug 3, 2026 at 9:48 AM EDT, Sang-Heon Jeon wrote:
> > pgdat_page_ext_init() sets pgdat->node_page_ext to NULL only on
> > FLATMEM. FLATMEM depends on !NUMA on every architecture, so the
>
> Should we add "depends on !NUMA" to FLATMEM and FLATMEM_MANUAL to
> prevent FLATMEM + NUMA being possible? Otherwise, FLATMEM + NUMA can
> have issues with pgdat_page_ext_init() being removed. I understand that
> no arch supports FLATMEM + NUMA.
Indeed. Existing NUMA code depends on SPARSEMEM-only macro, So FLATMEM
+ NUMA is not buildable. Making the constraint explicit sounds good to
me. I will address it in v2.
> > pgdat is always the zero-initialized contig_page_data and the store
> > has no effect.
> >
> > So remove the call site, the unused function and its declaration.
> >
> > No functional change.
> >
> > Signed-off-by: Sang-Heon Jeon <ekffu200098@gmail.com>
> > ---
> > include/linux/page_ext.h | 5 -----
> > mm/mm_init.c | 1 -
> > mm/page_ext.c | 9 ---------
> > 3 files changed, 15 deletions(-)
> >
> > diff --git a/include/linux/page_ext.h b/include/linux/page_ext.h
> > index f23d4b218da0..79c53ec45dfa 100644
> > --- a/include/linux/page_ext.h
> > +++ b/include/linux/page_ext.h
> > @@ -55,7 +55,6 @@ struct page_ext {
> >
> > extern bool early_page_ext;
> > extern unsigned long page_ext_size;
> > -extern void pgdat_page_ext_init(struct pglist_data *pgdat);
> >
> > static inline bool early_page_ext_enabled(void)
> > {
> > @@ -202,10 +201,6 @@ static inline bool early_page_ext_enabled(void)
> > return false;
> > }
> >
> > -static inline void pgdat_page_ext_init(struct pglist_data *pgdat)
> > -{
> > -}
> > -
> > static inline void page_ext_init(void)
> > {
> > }
> > diff --git a/mm/mm_init.c b/mm/mm_init.c
> > index 711f821f7b3c..e9c4204b73ad 100644
> > --- a/mm/mm_init.c
> > +++ b/mm/mm_init.c
> > @@ -1394,7 +1394,6 @@ static void __meminit pgdat_init_internals(struct pglist_data *pgdat)
> > for (i = 0; i < NR_VMSCAN_THROTTLE; i++)
> > init_waitqueue_head(&pgdat->reclaim_wait[i]);
> >
> > - pgdat_page_ext_init(pgdat);
> > lruvec_init(&pgdat->__lruvec);
> > }
> >
> > diff --git a/mm/page_ext.c b/mm/page_ext.c
> > index e2e92bd27ebd..b679a8c1f7d7 100644
> > --- a/mm/page_ext.c
> > +++ b/mm/page_ext.c
> > @@ -164,11 +164,6 @@ void __init page_ext_init_flatmem_late(void)
> > invoke_init_callbacks();
> > }
> >
> > -void __meminit pgdat_page_ext_init(struct pglist_data *pgdat)
> > -{
> > - pgdat->node_page_ext = NULL;
> > -}
> > -
> > static struct page_ext *lookup_page_ext(const struct page *page)
> > {
> > unsigned long pfn = page_to_pfn(page);
> > @@ -494,10 +489,6 @@ void __init page_ext_init(void)
> > panic("Out of memory");
> > }
> >
> > -void __meminit pgdat_page_ext_init(struct pglist_data *pgdat)
> > -{
> > -}
> > -
> > #endif
> >
> > /**
>
>
>
>
> --
> Best Regards,
> Yan, Zi
>
Best Regards,
Sang-Heon Jeon
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-08-04 4:17 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-03 13:48 [PATCH] mm/page_ext: remove pgdat_page_ext_init() Sang-Heon Jeon
2026-08-04 1:35 ` Zi Yan
2026-08-04 4:17 ` Sang-Heon Jeon
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox