On 7/9/26 9:25 PM, Li Zhe wrote: > Callers that want to update section bits from a PFN currently need to > open-code: > > set_page_section(page, pfn_to_section_nr(pfn)); > > and guard that sequence with #ifdef SECTION_IN_PAGE_FLAGS. > > Add set_page_section_from_pfn() to wrap that update in one place. When > section bits are stored in page flags, the helper derives the section > number from the PFN and updates the page flags. Otherwise keep it as a > no-op so callers can use one helper without open-coding > SECTION_IN_PAGE_FLAGS. > > Convert set_page_links() to use the new helper so later ZONE_DEVICE > fast-path patches can also update section bits without open-coding > SECTION_IN_PAGE_FLAGS at each callsite. > > This keeps the PFN-to-section translation local to the configurations > that actually store section bits in struct page flags, and avoids > exposing that detail to generic callers. > > No functional change intended. > > Signed-off-by: Li Zhe <[email protected]> > Reviewed-by: Mike Rapoport (Microsoft) <[email protected]> > --- > include/linux/mm.h | 15 ++++++++++++--- > 1 file changed, 12 insertions(+), 3 deletions(-) > > diff --git a/include/linux/mm.h b/include/linux/mm.h > index 485df9c2dbdd..43343bfce493 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -2541,11 +2541,22 @@ static inline void set_page_section(struct page > *page, unsigned long section) > page->flags.f |= (section & SECTIONS_MASK) << SECTIONS_PGSHIFT; > } > > +static inline void set_page_section_from_pfn(struct page *page, > + unsigned long pfn) > +{ > + set_page_section(page, pfn_to_section_nr(pfn)); > +} > + > static inline unsigned long memdesc_section(memdesc_flags_t mdf) > { > return (mdf.f >> SECTIONS_PGSHIFT) & SECTIONS_MASK; > } > #else /* !SECTION_IN_PAGE_FLAGS */ > +static inline void set_page_section_from_pfn(struct page *page, > + unsigned long pfn) > +{ > +} > + > static inline unsigned long memdesc_section(memdesc_flags_t mdf) > { > return 0; > @@ -2768,9 +2779,7 @@ static inline void set_page_links(struct page *page, > enum zone_type zone, > { > set_page_zone(page, zone); > set_page_node(page, node); > -#ifdef SECTION_IN_PAGE_FLAGS > - set_page_section(page, pfn_to_section_nr(pfn)); > -#endif > + set_page_section_from_pfn(page, pfn); > } > > /**
Reviewed-by: Balbir Singh <[email protected]>

