On Wed, 2018-10-24 at 17:27 +0200, Michal Hocko wrote: > On Wed 24-10-18 08:08:41, Alexander Duyck wrote: > > On Wed, 2018-10-24 at 14:36 +0200, Michal Hocko wrote: > > > On Wed 17-10-18 08:26:20, Alexander Duyck wrote: > > > [...] > > > > With that said I am also wondering if a possible solution to > > > > the complaints you had would be to look at just exporting the > > > > __init_pageblock function later and moving the call to > > > > memmap_init_zone_device out to the memremap or hotplug code > > > > when Dan gets the refactoring for HMM and memremap all sorted > > > > out. > > > > > > Why cannot we simply provide a constructor for each page by the > > > caller if there are special requirements? we currently have > > > alt_map > > > to do struct page allocation but nothing really prevents to make > > > it > > > more generic and control both allocation and initialization > > > whatever > > > suits a specific usecase. I really do not want make special cases > > > here and there. > > > > The advantage to the current __init_pageblock function is that we > > end up constructing everything we are going to write outside of the > > main loop and then are focused only on init. > > But we do really want move_pfn_range_to_zone to provide a usable pfn > range without any additional tweaks. If there are potential > optimizations to be done there then let's do it but please do not try > to micro optimize to the point that the interface doesn't make any > sense anymore. The actual difference between the two setups is not all that great. >From the sound of things the ultimate difference between the ZONE_DEVICE pages and regular pages is the pgmap and if we want the reserved bit set or not. What I am providing with __init_pageblock at this point is a function that is flexible enough for us to be able to do either one and then just expose a different front end on it for the specific type of page we have to initialize. It works for regular hotplug, ZONE_DEVICE, and deferred memory initialization. The way I view it is that this funciton is a high performance multi-tasker, not something that is micro- optimized for any one specific function. Thanks. - Alex