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

Reply via email to