On Mon, Jun 30, 2025 at 03:00:00PM +0200, David Hildenbrand wrote: > ... instead, look them up statically based on the page type. Maybe in the > future we want a registration interface? At least for now, it can be > easily handled using the two page types that actually support page > migration. > > The remaining usage of page->mapping is to flag such pages as actually > being movable (having movable_ops), which we will change next. > > Reviewed-by: Zi Yan <z...@nvidia.com> > Signed-off-by: David Hildenbrand <da...@redhat.com> > ---
> +static const struct movable_operations *page_movable_ops(struct page *page) > +{ > + VM_WARN_ON_ONCE_PAGE(!page_has_movable_ops(page), page); > + > + /* > + * If we enable page migration for a page of a certain type by marking > + * it as movable, the page type must be sticky until the page gets freed > + * back to the buddy. > + */ > +#ifdef CONFIG_BALLOON_COMPACTION > + if (PageOffline(page)) > + /* Only balloon compaction sets PageOffline pages movable. */ > + return &balloon_mops; > +#endif /* CONFIG_BALLOON_COMPACTION */ > +#if defined(CONFIG_ZSMALLOC) && defined(CONFIG_COMPACTION) > + if (PageZsmalloc(page)) > + return &zsmalloc_mops; > +#endif /* defined(CONFIG_ZSMALLOC) && defined(CONFIG_COMPACTION) */ What happens if: CONFIG_ZSMALLOC=y CONFIG_TRANSPARENT_HUGEPAGE=n CONFIG_COMPACTION=n CONFIG_MIGRATION=y ? > + return NULL; > +} > + > /** > * isolate_movable_ops_page - isolate a movable_ops page for migration > * @page: The page. Otherwise LGTM. -- Cheers, Harry / Hyeonggon