This is a requirement for making PageOffline pages not have a refcount in the long future ("frozen"), and for reworking non-folio page migration in the near future.
I have patches mostly ready to go to handle the latter. For turning all PageOffline() pages frozen, the non-folio page migration and memory ballooning drivers will have to be reworked first, to no longer rely on the refcount of PageOffline pages. Introduce PG_offline_skippable that only applies to PageOffline() pages -- of course, reusing one of the existing PG_ flags for now -- and convert virtio-mem to make use of the new way: to allow for skipping PageOffline pages during memory offlining, treating them as if they would not be allocated. Note that the existing mechanism relied on the driver (virtio-mem) dropping its reference during MEM_GOING_OFFLINE, which is complicated and not compatible with the concept of frozen pages (no refcount). Tested with virtio-mem on x86, including partially hotplugging a memory block (hotplugging 64MiB with a 128 MiB memory block size), and repeatedly onlining+offlining the memory block. Cc: David Hildenbrand <da...@redhat.com> Cc: "Michael S. Tsirkin" <m...@redhat.com> Cc: Jason Wang <jasow...@redhat.com> Cc: Xuan Zhuo <xuanz...@linux.alibaba.com> Cc: "Eugenio Pérez" <epere...@redhat.com> Cc: Andrew Morton <a...@linux-foundation.org> Cc: Oscar Salvador <osalva...@suse.de> Cc: Vlastimil Babka <vba...@suse.cz> Cc: Suren Baghdasaryan <sur...@google.com> Cc: Michal Hocko <mho...@suse.com> Cc: Brendan Jackman <jackm...@google.com> Cc: Johannes Weiner <han...@cmpxchg.org> Cc: Zi Yan <z...@nvidia.com> Cc: "Matthew Wilcox (Oracle)" <wi...@infradead.org> David Hildenbrand (2): mm/memory_hotplug: PG_offline_skippable for offlining memory blocks with PageOffline pages mm/memory_hotplug: remove -EBUSY handling from scan_movable_pages() drivers/virtio/virtio_mem.c | 111 +----------------------------------- include/linux/page-flags.h | 29 +++++++--- mm/memory_hotplug.c | 22 ++----- mm/page_alloc.c | 8 +-- mm/page_isolation.c | 21 +++---- 5 files changed, 40 insertions(+), 151 deletions(-) base-commit: 2f6baf8dadecc2bec7d6bc931f7e0d58d8443d76 -- 2.49.0