On Mon, Jun 30, 2025 at 03:00:08PM +0200, David Hildenbrand wrote: > Let's bring the docs up-to-date. > > Reviewed-by: Zi Yan <z...@nvidia.com> > Signed-off-by: David Hildenbrand <da...@redhat.com>
LGTM, so: Reviewed-by: Lorenzo Stoakes <lorenzo.stoa...@oracle.com> > --- > Documentation/mm/page_migration.rst | 39 ++++++++++++++++++++--------- > 1 file changed, 27 insertions(+), 12 deletions(-) > > diff --git a/Documentation/mm/page_migration.rst > b/Documentation/mm/page_migration.rst > index 519b35a4caf5b..d611bc21920d7 100644 > --- a/Documentation/mm/page_migration.rst > +++ b/Documentation/mm/page_migration.rst > @@ -146,18 +146,33 @@ Steps: > 18. The new page is moved to the LRU and can be scanned by the swapper, > etc. again. > > -Non-LRU page migration > -====================== > - > -Although migration originally aimed for reducing the latency of memory > -accesses for NUMA, compaction also uses migration to create high-order > -pages. For compaction purposes, it is also useful to be able to move > -non-LRU pages, such as zsmalloc and virtio-balloon pages. > - > -If a driver wants to make its pages movable, it should define a struct > -movable_operations. It then needs to call __SetPageMovable() on each > -page that it may be able to move. This uses the ``page->mapping`` field, > -so this field is not available for the driver to use for other purposes. > +movable_ops page migration > +========================== Bye bye inaccurate reference to LRU :) > + > +Selected typed, non-folio pages (e.g., pages inflated in a memory balloon, > +zsmalloc pages) can be migrated using the movable_ops migration framework. > + > +The "struct movable_operations" provide callbacks specific to a page type > +for isolating, migrating and un-isolating (putback) these pages. > + > +Once a page is indicated as having movable_ops, that condition must not > +change until the page was freed back to the buddy. This includes not > +changing/clearing the page type and not changing/clearing the > +PG_movable_ops page flag. > + > +Arbitrary drivers cannot currently make use of this framework, as it > +requires: > + > +(a) a page type > +(b) indicating them as possibly having movable_ops in page_has_movable_ops() > + based on the page type > +(c) returning the movable_ops from page_has_movable_ops() based on the page > + type > +(d) not reusing the PG_movable_ops and PG_movable_ops_isolated page flags > + for other purposes > + > +For example, balloon drivers can make use of this framework through the > +balloon-compaction infrastructure residing in the core kernel. > > Monitoring Migration > ===================== > -- > 2.49.0 >