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?

In balloon compaction code we properly handle that.

are not marked as having movable_ops, so we never end up in this function.

Right.

See how zsmalloc.c deals with CONFIG_COMPACTION, especially how
SetZsPageMovable() is a NOP without it.

Right.

Now I see what I was missing in the previous reply.
Thanks!

Please feel free to add:

Reviewed-by: Harry Yoo <harry....@oracle.com>

Thanks!

--
Cheers,

David / dhildenb


Reply via email to