include/linux/page-flags.h | 7 +++++++ mm/migrate.c | 5 +++++ 2 files changed, 12 insertions(+)
Hello,
I aim provides in this patch to provide native
folio abstractions for page functions like movable_ops
by wrapping folio->page structure in the native page function
Signed-off-by: yahia <yahia.a.abdrabou@gmail.com>
---
include/linux/page-flags.h | 7 +++++++
mm/migrate.c | 5 +++++
2 files changed, 12 insertions(+)
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h
index 7223f6f4e2b4..6776cf821edd 100644
--- a/include/linux/page-flags.h
+++ b/include/linux/page-flags.h
@@ -1110,6 +1110,7 @@ bool is_free_buddy_page(const struct page *page);
*/
TESTPAGEFLAG(MovableOps, movable_ops, PF_NO_TAIL);
SETPAGEFLAG(MovableOps, movable_ops, PF_NO_TAIL);
+FOLIO_TEST_FLAG(MovableOpsIsolated, movable_ops_isolated)
/*
* A movable_ops page has this flag set while it is isolated for migration.
* This flag primarily protects against concurrent migration attempts.
@@ -1139,6 +1140,12 @@ static inline bool page_has_movable_ops(const struct page *page)
(PageOffline(page) || PageZsmalloc(page));
}
+static inline bool folio_has_movable_ops(struct folio *folio)
+{
+ return PageMovableOps(&folio->page) &&
+ (PageOffline(&folio->page) || PageZsmalloc(&folio->page));
+}
+
static __always_inline int PageAnonExclusive(const struct page *page)
{
VM_BUG_ON_PGFLAGS(!PageAnon(page), page);
diff --git a/mm/migrate.c b/mm/migrate.c
index 8a64291ab5b4..817a8c0b84d9 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -96,6 +96,11 @@ static const struct movable_operations *page_movable_ops(struct page *page)
return NULL;
}
+static const struct movable_operations *folio_movable_ops(struct folio *folio)
+{
+ return page_movable_ops(&folio->page);
+}
+
/**
* isolate_movable_ops_page - isolate a movable_ops page for migration
* @page: The page.
--
2.54.0
On 7 Jun 2026, at 20:12, yahia wrote:
> Hello,
>
> I aim provides in this patch to provide native
> folio abstractions for page functions like movable_ops
> by wrapping folio->page structure in the native page function
MovableOps and MovableOpsIsolated pages are not folios and they
are supposed to only be order-0 pages. This patch is unnecessary.
Please read the original patchset for more details[1].
[1] https://lore.kernel.org/all/20250704102524.326966-1-david@redhat.com/
>
> Signed-off-by: yahia <yahia.a.abdrabou@gmail.com>
> ---
> include/linux/page-flags.h | 7 +++++++
> mm/migrate.c | 5 +++++
> 2 files changed, 12 insertions(+)
>
> diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h
> index 7223f6f4e2b4..6776cf821edd 100644
> --- a/include/linux/page-flags.h
> +++ b/include/linux/page-flags.h
> @@ -1110,6 +1110,7 @@ bool is_free_buddy_page(const struct page *page);
> */
> TESTPAGEFLAG(MovableOps, movable_ops, PF_NO_TAIL);
> SETPAGEFLAG(MovableOps, movable_ops, PF_NO_TAIL);
> +FOLIO_TEST_FLAG(MovableOpsIsolated, movable_ops_isolated)
> /*
> * A movable_ops page has this flag set while it is isolated for migration.
> * This flag primarily protects against concurrent migration attempts.
> @@ -1139,6 +1140,12 @@ static inline bool page_has_movable_ops(const struct page *page)
> (PageOffline(page) || PageZsmalloc(page));
> }
>
> +static inline bool folio_has_movable_ops(struct folio *folio)
> +{
> + return PageMovableOps(&folio->page) &&
> + (PageOffline(&folio->page) || PageZsmalloc(&folio->page));
> +}
> +
> static __always_inline int PageAnonExclusive(const struct page *page)
> {
> VM_BUG_ON_PGFLAGS(!PageAnon(page), page);
> diff --git a/mm/migrate.c b/mm/migrate.c
> index 8a64291ab5b4..817a8c0b84d9 100644
> --- a/mm/migrate.c
> +++ b/mm/migrate.c
> @@ -96,6 +96,11 @@ static const struct movable_operations *page_movable_ops(struct page *page)
> return NULL;
> }
>
> +static const struct movable_operations *folio_movable_ops(struct folio *folio)
> +{
> + return page_movable_ops(&folio->page);
> +}
> +
> /**
> * isolate_movable_ops_page - isolate a movable_ops page for migration
> * @page: The page.
> --
> 2.54.0
--
Best Regards,
Yan, Zi
© 2016 - 2026 Red Hat, Inc.