Re: [PATCH] mm/page_ext: remove pgdat_page_ext_init()

Sang-Heon Jeon <[email protected]> Tue, 4 Aug 2026 13:17:01 +0900
Newsgroups org.kvack.linux-mm
Message-ID <CABFDxMGbdkJwv-jPnfVww1Z+wg=+1x6sT5bH1dvxY3N==gJhSQ@mail.gmail.com>
Hello,

On Tue, Aug 4, 2026 at 10:35=E2=80=AFAM Zi Yan <[email protected]> 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 <[email protected]>
> > ---
> >  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 =3D 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 =3D NULL;
> > -}
> > -
> >  static struct page_ext *lookup_page_ext(const struct page *page)
> >  {
> >       unsigned long pfn =3D 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