linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 00/29] mm/migration: rework movable_ops page migration (part 1)
@ 2025-06-30 12:59 David Hildenbrand
  2025-06-30 12:59 ` [PATCH v1 01/29] mm/balloon_compaction: we cannot have isolated pages in the balloon list David Hildenbrand
                   ` (29 more replies)
  0 siblings, 30 replies; 138+ messages in thread
From: David Hildenbrand @ 2025-06-30 12:59 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-mm, linux-doc, linuxppc-dev, virtualization, linux-fsdevel,
	David Hildenbrand, Andrew Morton, Jonathan Corbet,
	Madhavan Srinivasan, Michael Ellerman, Nicholas Piggin,
	Christophe Leroy, Jerrin Shaji George, Arnd Bergmann,
	Greg Kroah-Hartman, Michael S. Tsirkin, Jason Wang, Xuan Zhuo,
	Eugenio Pérez, Alexander Viro, Christian Brauner, Jan Kara,
	Zi Yan, Matthew Brost, Joshua Hahn, Rakie Kim, Byungchul Park,
	Gregory Price, Ying Huang, Alistair Popple, Lorenzo Stoakes,
	Liam R. Howlett, Vlastimil Babka, Mike Rapoport,
	Suren Baghdasaryan, Michal Hocko, Matthew Wilcox (Oracle),
	Minchan Kim, Sergey Senozhatsky, Brendan Jackman, Johannes Weiner,
	Jason Gunthorpe, John Hubbard, Peter Xu, Xu Xin, Chengming Zhou,
	Miaohe Lin, Naoya Horiguchi, Oscar Salvador, Rik van Riel,
	Harry Yoo, Qi Zheng, Shakeel Butt

Based on mm/mm-new.

In the future, as we decouple "struct page" from "struct folio", pages
that support "non-lru page migration" -- movable_ops page migration
such as memory balloons and zsmalloc -- will no longer be folios. They
will not have ->mapping, ->lru, and likely no refcount and no
page lock. But they will have a type and flags :)

This is the first part (other parts not written yet) of decoupling
movable_ops page migration from folio migration.

In this series, we get rid of the ->mapping usage, and start cleaning up
the code + separating it from folio migration.

Migration core will have to be further reworked to not treat movable_ops
pages like folios. This is the first step into that direction.

Heavily tested with virtio-balloon and lightly tested with zsmalloc
on x86-64. Cross-compile-tested.

RFC -> v1:
* Some smaller fixups + comment changes + subject/description updates
* Added ACKs/RBs (hope I didn't miss any)
* "mm/migrate: move movable_ops page handling out of move_to_new_folio()"
 -> Fix goto out; vs goto out_unlock_both;
* "mm: remove __folio_test_movable()"
 -> Fix page_has_movable_ops() checking wrong page

Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Nicholas Piggin <npiggin@gmail.com>
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Jerrin Shaji George <jerrin.shaji-george@broadcom.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Jason Wang <jasowang@redhat.com>
Cc: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Cc: "Eugenio Pérez" <eperezma@redhat.com>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: Christian Brauner <brauner@kernel.org>
Cc: Jan Kara <jack@suse.cz>
Cc: Zi Yan <ziy@nvidia.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Joshua Hahn <joshua.hahnjy@gmail.com>
Cc: Rakie Kim <rakie.kim@sk.com>
Cc: Byungchul Park <byungchul@sk.com>
Cc: Gregory Price <gourry@gourry.net>
Cc: Ying Huang <ying.huang@linux.alibaba.com>
Cc: Alistair Popple <apopple@nvidia.com>
Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: "Liam R. Howlett" <Liam.Howlett@oracle.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Sergey Senozhatsky <senozhatsky@chromium.org>
Cc: Brendan Jackman <jackmanb@google.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Jason Gunthorpe <jgg@ziepe.ca>
Cc: John Hubbard <jhubbard@nvidia.com>
Cc: Peter Xu <peterx@redhat.com>
Cc: Xu Xin <xu.xin16@zte.com.cn>
Cc: Chengming Zhou <chengming.zhou@linux.dev>
Cc: Miaohe Lin <linmiaohe@huawei.com>
Cc: Naoya Horiguchi <nao.horiguchi@gmail.com>
Cc: Oscar Salvador <osalvador@suse.de>
Cc: Rik van Riel <riel@surriel.com>
Cc: Harry Yoo <harry.yoo@oracle.com>
Cc: Qi Zheng <zhengqi.arch@bytedance.com>
Cc: Shakeel Butt <shakeel.butt@linux.dev>


David Hildenbrand (29):
  mm/balloon_compaction: we cannot have isolated pages in the balloon
    list
  mm/balloon_compaction: convert balloon_page_delete() to
    balloon_page_finalize()
  mm/zsmalloc: drop PageIsolated() related VM_BUG_ONs
  mm/page_alloc: let page freeing clear any set page type
  mm/balloon_compaction: make PageOffline sticky until the page is freed
  mm/zsmalloc: make PageZsmalloc() sticky until the page is freed
  mm/migrate: rename isolate_movable_page() to
    isolate_movable_ops_page()
  mm/migrate: rename putback_movable_folio() to
    putback_movable_ops_page()
  mm/migrate: factor out movable_ops page handling into
    migrate_movable_ops_page()
  mm/migrate: remove folio_test_movable() and folio_movable_ops()
  mm/migrate: move movable_ops page handling out of move_to_new_folio()
  mm/zsmalloc: stop using __ClearPageMovable()
  mm/balloon_compaction: stop using __ClearPageMovable()
  mm/migrate: remove __ClearPageMovable()
  mm/migration: remove PageMovable()
  mm: rename __PageMovable() to page_has_movable_ops()
  mm/page_isolation: drop __folio_test_movable() check for large folios
  mm: remove __folio_test_movable()
  mm: stop storing migration_ops in page->mapping
  mm: convert "movable" flag in page->mapping to a page flag
  mm: rename PG_isolated to PG_movable_ops_isolated
  mm/page-flags: rename PAGE_MAPPING_MOVABLE to PAGE_MAPPING_ANON_KSM
  mm/page-alloc: remove PageMappingFlags()
  mm/page-flags: remove folio_mapping_flags()
  mm: simplify folio_expected_ref_count()
  mm: rename PAGE_MAPPING_* to FOLIO_MAPPING_*
  docs/mm: convert from "Non-LRU page migration" to "movable_ops page
    migration"
  mm/balloon_compaction: "movable_ops" doc updates
  mm/balloon_compaction: provide single balloon_page_insert() and
    balloon_mapping_gfp_mask()

 Documentation/mm/page_migration.rst  |  39 ++--
 arch/powerpc/platforms/pseries/cmm.c |   2 +-
 drivers/misc/vmw_balloon.c           |   3 +-
 drivers/virtio/virtio_balloon.c      |   4 +-
 fs/proc/page.c                       |   4 +-
 include/linux/balloon_compaction.h   |  90 ++++-----
 include/linux/fs.h                   |   2 +-
 include/linux/migrate.h              |  46 +----
 include/linux/mm.h                   |   4 +-
 include/linux/mm_types.h             |   1 -
 include/linux/page-flags.h           | 104 ++++++----
 include/linux/pagemap.h              |   2 +-
 include/linux/zsmalloc.h             |   2 +
 mm/balloon_compaction.c              |  21 ++-
 mm/compaction.c                      |  44 +----
 mm/gup.c                             |   4 +-
 mm/internal.h                        |   2 +-
 mm/ksm.c                             |   4 +-
 mm/memory-failure.c                  |   4 +-
 mm/memory_hotplug.c                  |   8 +-
 mm/migrate.c                         | 271 ++++++++++++++++-----------
 mm/page_alloc.c                      |  12 +-
 mm/page_isolation.c                  |  12 +-
 mm/rmap.c                            |  16 +-
 mm/util.c                            |   6 +-
 mm/vmscan.c                          |   6 +-
 mm/zpdesc.h                          |  15 +-
 mm/zsmalloc.c                        |  29 ++-
 28 files changed, 365 insertions(+), 392 deletions(-)


base-commit: 2e462e10265dcdce546cab85a902b716e2b26d9f
-- 
2.49.0


^ permalink raw reply	[flat|nested] 138+ messages in thread

end of thread, other threads:[~2025-07-03  7:49 UTC | newest]

Thread overview: 138+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-30 12:59 [PATCH v1 00/29] mm/migration: rework movable_ops page migration (part 1) David Hildenbrand
2025-06-30 12:59 ` [PATCH v1 01/29] mm/balloon_compaction: we cannot have isolated pages in the balloon list David Hildenbrand
2025-06-30 14:45   ` Lorenzo Stoakes
2025-06-30 12:59 ` [PATCH v1 02/29] mm/balloon_compaction: convert balloon_page_delete() to balloon_page_finalize() David Hildenbrand
2025-06-30 15:15   ` Lorenzo Stoakes
2025-07-01  7:58     ` David Hildenbrand
2025-07-01  9:01       ` Lorenzo Stoakes
2025-07-01  9:59         ` David Hildenbrand
2025-06-30 12:59 ` [PATCH v1 03/29] mm/zsmalloc: drop PageIsolated() related VM_BUG_ONs David Hildenbrand
2025-06-30 15:17   ` Lorenzo Stoakes
2025-07-01  8:03     ` David Hildenbrand
2025-07-01  8:57       ` Lorenzo Stoakes
2025-06-30 12:59 ` [PATCH v1 04/29] mm/page_alloc: let page freeing clear any set page type David Hildenbrand
2025-06-30 15:27   ` Lorenzo Stoakes
2025-07-01  8:17     ` David Hildenbrand
2025-07-01  8:27       ` Lorenzo Stoakes
2025-07-01  8:34         ` David Hildenbrand
2025-07-01  8:37           ` Lorenzo Stoakes
2025-07-01 10:02             ` David Hildenbrand
2025-06-30 12:59 ` [PATCH v1 05/29] mm/balloon_compaction: make PageOffline sticky until the page is freed David Hildenbrand
2025-06-30 16:01   ` Lorenzo Stoakes
2025-06-30 16:14     ` Zi Yan
2025-06-30 16:17       ` Lorenzo Stoakes
2025-07-01  6:13       ` Harry Yoo
2025-07-01  8:11         ` David Hildenbrand
2025-07-01  8:12       ` David Hildenbrand
2025-07-01  8:21     ` David Hildenbrand
2025-06-30 12:59 ` [PATCH v1 06/29] mm/zsmalloc: make PageZsmalloc() " David Hildenbrand
2025-06-30 16:03   ` Lorenzo Stoakes
2025-07-01  8:27     ` David Hildenbrand
2025-06-30 12:59 ` [PATCH v1 07/29] mm/migrate: rename isolate_movable_page() to isolate_movable_ops_page() David Hildenbrand
2025-06-30 16:24   ` Lorenzo Stoakes
2025-07-01  8:29     ` David Hildenbrand
2025-07-01  9:11       ` Lorenzo Stoakes
2025-06-30 12:59 ` [PATCH v1 08/29] mm/migrate: rename putback_movable_folio() to putback_movable_ops_page() David Hildenbrand
2025-06-30 16:29   ` Lorenzo Stoakes
2025-07-01  6:04   ` Harry Yoo
2025-07-01 14:42   ` Zi Yan
2025-06-30 12:59 ` [PATCH v1 09/29] mm/migrate: factor out movable_ops page handling into migrate_movable_ops_page() David Hildenbrand
2025-06-30 17:05   ` Lorenzo Stoakes
2025-07-01  9:24     ` David Hildenbrand
2025-07-01 10:10       ` David Hildenbrand
2025-07-01  7:05   ` Harry Yoo
2025-06-30 12:59 ` [PATCH v1 10/29] mm/migrate: remove folio_test_movable() and folio_movable_ops() David Hildenbrand
2025-06-30 17:07   ` Lorenzo Stoakes
2025-07-01 10:15     ` David Hildenbrand
2025-07-01 10:25       ` Lorenzo Stoakes
2025-07-01  6:31   ` Harry Yoo
2025-06-30 12:59 ` [PATCH v1 11/29] mm/migrate: move movable_ops page handling out of move_to_new_folio() David Hildenbrand
2025-07-01  7:14   ` Harry Yoo
2025-07-01  9:37   ` Lorenzo Stoakes
2025-06-30 12:59 ` [PATCH v1 12/29] mm/zsmalloc: stop using __ClearPageMovable() David Hildenbrand
2025-07-01  8:20   ` Harry Yoo
2025-07-01  9:40   ` Lorenzo Stoakes
2025-07-02  8:11   ` Sergey Senozhatsky
2025-07-02  8:25     ` David Hildenbrand
2025-07-02 10:10       ` Sergey Senozhatsky
2025-07-02 10:55         ` David Hildenbrand
2025-07-03  2:28           ` Sergey Senozhatsky
2025-07-03  3:22             ` Sergey Senozhatsky
2025-07-03  7:45               ` David Hildenbrand
2025-07-03  7:49                 ` Sergey Senozhatsky
2025-06-30 12:59 ` [PATCH v1 13/29] mm/balloon_compaction: " David Hildenbrand
2025-07-01 10:03   ` Lorenzo Stoakes
2025-07-01 10:19     ` David Hildenbrand
2025-07-01 10:40       ` Lorenzo Stoakes
2025-07-01 12:24         ` David Hildenbrand
2025-06-30 12:59 ` [PATCH v1 14/29] mm/migrate: remove __ClearPageMovable() David Hildenbrand
2025-07-01  8:36   ` Harry Yoo
2025-07-01 10:43   ` Lorenzo Stoakes
2025-07-01 12:25     ` David Hildenbrand
2025-06-30 12:59 ` [PATCH v1 15/29] mm/migration: remove PageMovable() David Hildenbrand
2025-07-01 10:50   ` Lorenzo Stoakes
2025-07-01 12:27     ` David Hildenbrand
2025-07-02  9:20   ` Harry Yoo
2025-06-30 12:59 ` [PATCH v1 16/29] mm: rename __PageMovable() to page_has_movable_ops() David Hildenbrand
2025-07-01 10:59   ` Lorenzo Stoakes
2025-07-01 12:29     ` David Hildenbrand
2025-07-02  9:29   ` Harry Yoo
2025-06-30 12:59 ` [PATCH v1 17/29] mm/page_isolation: drop __folio_test_movable() check for large folios David Hildenbrand
2025-07-01 11:03   ` Lorenzo Stoakes
2025-07-01 12:32     ` David Hildenbrand
2025-07-02  9:54       ` Harry Yoo
2025-07-02  9:48   ` Harry Yoo
2025-06-30 12:59 ` [PATCH v1 18/29] mm: remove __folio_test_movable() David Hildenbrand
2025-07-01 11:30   ` Lorenzo Stoakes
2025-07-01 12:36     ` David Hildenbrand
2025-07-02 10:20   ` Harry Yoo
2025-06-30 13:00 ` [PATCH v1 19/29] mm: stop storing migration_ops in page->mapping David Hildenbrand
2025-07-01 12:12   ` Lorenzo Stoakes
2025-07-01 12:41     ` David Hildenbrand
2025-07-02 10:34   ` Harry Yoo
2025-07-02 11:04     ` David Hildenbrand
2025-07-02 11:43       ` Harry Yoo
2025-07-02 11:51         ` David Hildenbrand
2025-07-02 11:57           ` Harry Yoo
2025-06-30 13:00 ` [PATCH v1 20/29] mm: convert "movable" flag in page->mapping to a page flag David Hildenbrand
2025-07-01 12:44   ` Lorenzo Stoakes
2025-07-01 12:49     ` David Hildenbrand
2025-07-02 11:54   ` Harry Yoo
2025-07-02 12:01     ` David Hildenbrand
2025-07-02 13:01       ` Harry Yoo
2025-07-02 15:25         ` David Hildenbrand
2025-06-30 13:00 ` [PATCH v1 21/29] mm: rename PG_isolated to PG_movable_ops_isolated David Hildenbrand
2025-07-01 12:51   ` Lorenzo Stoakes
2025-07-01 16:19     ` David Hildenbrand
2025-07-02 13:04   ` Harry Yoo
2025-06-30 13:00 ` [PATCH v1 22/29] mm/page-flags: rename PAGE_MAPPING_MOVABLE to PAGE_MAPPING_ANON_KSM David Hildenbrand
2025-07-01 12:54   ` Lorenzo Stoakes
2025-07-01 19:31     ` David Hildenbrand
2025-07-02  9:06       ` Lorenzo Stoakes
2025-07-02 13:11   ` Harry Yoo
2025-06-30 13:00 ` [PATCH v1 23/29] mm/page-alloc: remove PageMappingFlags() David Hildenbrand
2025-07-01 13:02   ` Lorenzo Stoakes
2025-07-01 19:34     ` David Hildenbrand
2025-07-02  8:49       ` Lorenzo Stoakes
2025-07-02  9:02         ` David Hildenbrand
2025-07-02  9:09           ` Lorenzo Stoakes
2025-07-02  9:16             ` David Hildenbrand
2025-07-02 13:20   ` Harry Yoo
2025-06-30 13:00 ` [PATCH v1 24/29] mm/page-flags: remove folio_mapping_flags() David Hildenbrand
2025-07-01 13:03   ` Lorenzo Stoakes
2025-07-02 13:23   ` Harry Yoo
2025-06-30 13:00 ` [PATCH v1 25/29] mm: simplify folio_expected_ref_count() David Hildenbrand
2025-07-01 13:15   ` Lorenzo Stoakes
2025-07-02 13:40   ` Harry Yoo
2025-06-30 13:00 ` [PATCH v1 26/29] mm: rename PAGE_MAPPING_* to FOLIO_MAPPING_* David Hildenbrand
2025-07-01 13:17   ` Lorenzo Stoakes
2025-07-02 14:10   ` Harry Yoo
2025-06-30 13:00 ` [PATCH v1 27/29] docs/mm: convert from "Non-LRU page migration" to "movable_ops page migration" David Hildenbrand
2025-07-01 13:19   ` Lorenzo Stoakes
2025-07-02 14:23   ` Harry Yoo
2025-07-02 14:52     ` David Hildenbrand
2025-06-30 13:00 ` [PATCH v1 28/29] mm/balloon_compaction: "movable_ops" doc updates David Hildenbrand
2025-07-01 13:20   ` Lorenzo Stoakes
2025-06-30 13:00 ` [PATCH v1 29/29] mm/balloon_compaction: provide single balloon_page_insert() and balloon_mapping_gfp_mask() David Hildenbrand
2025-07-01 13:22   ` Lorenzo Stoakes
2025-07-01 19:38 ` [PATCH v1 00/29] mm/migration: rework movable_ops page migration (part 1) David Hildenbrand

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).