On 10.03.20 12:47, Michal Hocko wrote: > On Mon 02-03-20 14:49:36, David Hildenbrand wrote: >> virtio-mem wants to allow to offline memory blocks of which some parts >> were unplugged (allocated via alloc_contig_range()), especially, to later >> offline and remove completely unplugged memory blocks. The important part >> is that PageOffline() has to remain set until the section is offline, so >> these pages will never get accessed (e.g., when dumping). The pages should >> not be handed back to the buddy (which would require clearing PageOffline() >> and result in issues if offlining fails and the pages are suddenly in the >> buddy). >> >> Let's allow to do that by allowing to isolate any PageOffline() page >> when offlining. This way, we can reach the memory hotplug notifier >> MEM_GOING_OFFLINE, where the driver can signal that he is fine with >> offlining this page by dropping its reference count. PageOffline() pages >> with a reference count of 0 can then be skipped when offlining the >> pages (like if they were free, however they are not in the buddy). >> >> Anybody who uses PageOffline() pages and does not agree to offline them >> (e.g., Hyper-V balloon, XEN balloon, VMWare balloon for 2MB pages) will not >> decrement the reference count and make offlining fail when trying to >> migrate such an unmovable page. So there should be no observable change. >> Same applies to balloon compaction users (movable PageOffline() pages), the >> pages will simply be migrated. >> >> Note 1: If offlining fails, a driver has to increment the reference >> count again in MEM_CANCEL_OFFLINE. >> >> Note 2: A driver that makes use of this has to be aware that re-onlining >> the memory block has to be handled by hooking into onlining code >> (online_page_callback_t), resetting the page PageOffline() and >> not giving them to the buddy. >> >> Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> >> Cc: Juergen Gross <jgross@xxxxxxxx> >> Cc: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> >> Cc: Pavel Tatashin <pavel.tatashin@xxxxxxxxxxxxx> >> Cc: Alexander Duyck <alexander.h.duyck@xxxxxxxxxxxxxxx> >> Cc: Vlastimil Babka <vbabka@xxxxxxx> >> Cc: Johannes Weiner <hannes@xxxxxxxxxxx> >> Cc: Anthony Yznaga <anthony.yznaga@xxxxxxxxxx> >> Cc: Michal Hocko <mhocko@xxxxxxxx> >> Cc: Oscar Salvador <osalvador@xxxxxxx> >> Cc: Mel Gorman <mgorman@xxxxxxxxxxxxxxxxxxx> >> Cc: Mike Rapoport <rppt@xxxxxxxxxxxxx> >> Cc: Dan Williams <dan.j.williams@xxxxxxxxx> >> Cc: Anshuman Khandual <anshuman.khandual@xxxxxxx> >> Cc: Qian Cai <cai@xxxxxx> >> Cc: Pingfan Liu <kernelfans@xxxxxxxxx> >> Signed-off-by: David Hildenbrand <david@xxxxxxxxxx> > > Looks good to me. Thanks for dropping __put_page hooks! > Acked-by: Michal Hocko <mhocko@xxxxxxxx> Thanks a lot Michal - looks much cleaner this way. -- Thanks, David / dhildenb