On Wed, Jul 02, 2025 at 01:51:52PM +0200, David Hildenbrand wrote: > On 02.07.25 13:43, Harry Yoo wrote: > > On Wed, Jul 02, 2025 at 01:04:05PM +0200, David Hildenbrand wrote: > > > On 02.07.25 12:34, Harry Yoo wrote: > > > > 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 > > > > > > Pages are never allocated from ZONE_MOVABLE/CMA and > > > > I don't understand how that's true, neither zram nor zsmalloc clears > > __GFP_MOVABLE when CONFIG_COMPACTION=n? > > > > ...Or perhaps I'm still missing some pieces ;) > > You might have found a bug in zsmalloc then :) Without support for > compaction, we > must clear __GFP_MOVABLE in alloc_zpdesc() I assume. > > Do you have the capacity to look into that and send a fix if really broken?
I'll add that to somehwere in my TODO list :) 1) confirming if it's really broken and 2) fixing it if so. > In balloon compaction code we properly handle that. -- Cheers, Harry / Hyeonggon