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. Also tested that forced driver unloading with partially plugged memory blocks keeps working as is. Cc: David Hildenbrand <david@xxxxxxxxxx> Cc: "Michael S. Tsirkin" <mst@xxxxxxxxxx> Cc: Jason Wang <jasowang@xxxxxxxxxx> Cc: Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx> Cc: "Eugenio Pérez" <eperezma@xxxxxxxxxx> Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> Cc: Oscar Salvador <osalvador@xxxxxxx> Cc: Vlastimil Babka <vbabka@xxxxxxx> Cc: Suren Baghdasaryan <surenb@xxxxxxxxxx> Cc: Michal Hocko <mhocko@xxxxxxxx> Cc: Brendan Jackman <jackmanb@xxxxxxxxxx> Cc: Johannes Weiner <hannes@xxxxxxxxxxx> Cc: Zi Yan <ziy@xxxxxxxxxx> Cc: "Matthew Wilcox (Oracle)" <willy@xxxxxxxxxxxxx> v1 -> v2: * Handle forced driver unloading of virtio-mem: clear the flag * Added a comment for a PageOfflineSkippable check * Added more details to the patch description * Drop patch #2 ("mm/memory_hotplug: remove -EBUSY handling from scan_movable_pages()") David Hildenbrand (1): mm/memory_hotplug: PG_offline_skippable for offlining memory blocks with PageOffline pages drivers/virtio/virtio_mem.c | 141 ++++++++---------------------------- include/linux/page-flags.h | 29 ++++++-- mm/memory_hotplug.c | 17 +++-- mm/page_alloc.c | 8 +- mm/page_isolation.c | 21 ++---- 5 files changed, 74 insertions(+), 142 deletions(-) -- 2.49.0